天天看點

程式設計領域名詞:魔法數值、魔法數字、魔法值

魔法數值、魔法數字、魔法值,這是一個東西,不同的叫法。

魔法數字,在程式設計領域指的是莫名其妙出現的數字。數字的意義必須通過詳細閱讀才能推斷出來。一般魔法數字都是需要使用枚舉變量來替換的。

程式設計領域名詞:魔法數值、魔法數字、魔法值

魔法數字常見于較老的代碼,一些程式設計新手也會使用,其實有幾年經驗的人也可能存在這種問題,有些情況下數字在代碼中的意義是顯而易見的。

例如:

在以上的代碼中,我們看到,這裡出現了數字1、2。但是我們并不知道這個1,2分别代表什麼。

這種情況下,1、2這兩個數字就稱為魔法數字。

魔法數值使代碼的可讀性大大下降。而且,如果同樣的數值多次出現時,到底這些數值是不是帶有同樣的含義呢,誰也說不清楚。另一方面,如果本來應該使用相同數值的地方,一旦用錯了,也很難發現。是以,需要注意以下幾點,極力避免使用魔法數值。

  ① 不使用魔法數值,代之以有名字的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:名字的含義是很清楚的

繼續閱讀