JAVA使用魔法數值
阿新 • • 發佈:2019-01-06
所謂魔法數值,是指在程式碼中直接出現的數值,只有在這個數值記述的那部分程式碼中才能明確瞭解其含義。
魔法數值使程式碼的可讀性大大下降。而且,如果同樣的數值多次出現時,到底這些數值是不是帶有同樣的含義呢,誰也說不清楚。另一方面,如果本來應該使用相同數值的地方,一旦用錯了,也很難發現。因此,需要注意以下幾點,極力避免使用魔法數值。
① 不使用魔法數值,代之以有名字的Static final或者enum值
在Java語言中,對有名字的值的定義,可以使用用Static final或者enum來宣告的值
注意(命名方法):在取名時一定要注意增加名字的資訊量。比如,為16命名為SIXTEEN是沒有意義的。
如果16表示的是價格表的一個元素,則應該命名為PRICE_TABLE_MAX。關於命名規則,還要參照本小冊子的第6條。
② 原則上,數值就是魔法數值
但是,0,作為陣列的最小下標是經常使用的。
例:for( int i = 0; I < table.leERRORth(); i++ )
讀到這裡,讀者都會認為這裡的0是陣列的最小下標,所以在這裡不認為0是魔法數值。
另外,0經常被作為變數初始化的預設值,這時候一般也不認為0是魔法數值。
通過使用有名字的值,一方面可以提高程式碼的可讀性,另一方面,也可以把變更的地方區域性化,從而提高可維護性。
例子:
魔法數字的例子
int priceTable[] = new int[16]; //ERROR:這個16究竟有何含義呢?
使用了帶名字的數值的例子
static final int PRICE_TABLE_MAX = 16; //OK:帶名字
int price Table[] = new int [PRICE_TABLE_MAX]; //OK:名字的含義是很清楚的
魔法數值使程式碼的可讀性大大下降。而且,如果同樣的數值多次出現時,到底這些數值是不是帶有同樣的含義呢,誰也說不清楚。另一方面,如果本來應該使用相同數值的地方,一旦用錯了,也很難發現。因此,需要注意以下幾點,極力避免使用魔法數值。
① 不使用魔法數值,代之以有名字的Static final或者enum值
在Java語言中,對有名字的值的定義,可以使用用Static final或者enum來宣告的值
注意(命名方法):在取名時一定要注意增加名字的資訊量。比如,為16命名為SIXTEEN是沒有意義的。
如果16表示的是價格表的一個元素,則應該命名為PRICE_TABLE_MAX。關於命名規則,還要參照本小冊子的第6條。
② 原則上,數值就是魔法數值
但是,0,作為陣列的最小下標是經常使用的。
例:for( int i = 0; I < table.leERRORth(); i++ )
讀到這裡,讀者都會認為這裡的0是陣列的最小下標,所以在這裡不認為0是魔法數值。
另外,0經常被作為變數初始化的預設值,這時候一般也不認為0是魔法數值。
通過使用有名字的值,一方面可以提高程式碼的可讀性,另一方面,也可以把變更的地方區域性化,從而提高可維護性。
例子:
魔法數字的例子
int priceTable[] =
使用了帶名字的數值的例子
static final int PRICE_TABLE_MAX = 16; //OK:帶名字
int price Table[] = new int [PRICE_TABLE_MAX]; //OK:名字的含義是很清楚的