Java中的魔法值介紹及解決辦法
阿新 • • 發佈:2018-12-13
所謂魔法值,是指在程式碼中直接出現的數值,只有在這個數值記述的那部分程式碼中才能明確瞭解其含義。
int [] array = new int[20];
for (int i = 0; i < 20; i++){
System.out.print(array[i]);
}
上述例子中,如果陣列的宣告與for迴圈相隔比較遠,就很難知道 for迴圈裡面的控制條件 i < 20 中 20 具體含義是什麼。它是陣列的長度呢,還是根據需求定義的界限值呢?就搞不清楚。 魔法數值使程式碼的可讀性大大下降。而且,如果同樣的數值多次出現時,到底這些數值是不是帶有同樣的含義呢,誰也說不清楚。另一方面,如果本來應該使用相同數值的地方,一旦用錯了,也很難發現。因此,我們應極力避免使用魔法數值。
解決辦法:使用static final 定義常量或使用enum值
static final int lengthOfArray = 20;
int [] array = new int[lengthOfArray];
for (int i = 0; i < lengthOfArray; i++){
System.out.print(array[lengthOfArray]);
}
上述程式碼就使用static final 定義常量 lengthOfArray = 20; 直接看for迴圈裡面的控制條件 i < lengthOfArray; 可以完全理解lengthOfArray 代表什麼意思(當然,變數的命名也要清楚,符合規範,不然別人還是看不懂)。這裡還涉及到一個問題,為什麼 i = 0 語句中可以直接使用常量 0,這是因為 0 作為陣列最小下標是大家的共識,這樣寫大家都可以理解,就沒有必要再去宣告它。
注:使用static final 宣告常量,可以方便以後維護更新。修改變數的值時只用修改一處,還不用擔心修改了其他不該修改的常量。