因為下述理由,一般認為程式碼中不應該含有魔術數字。
一、數值的意義難以了解
二、數值需要變動時,可能要改不只一個地方
回到頂部舉例
例1:price_tax = 1.05 * price
例1是對輸入的價格(price)計算含稅(price_tax)售價的程式。 但稅率並不是萬年不變,當政府調整稅率時,會有修改程式的必要。 這裡“1.05”就是一種魔術數字,“為什麼是1.05”會讓人無法馬上了解。
下面是去掉魔術數字的範例,程式容易了解也容易修正。
例1 (修正):TAX = 0.05 price_tax = (1.0 + TAX) * price
例2:setcolor("text", 0xffffff)
例2是設定以白色顯示程式碼。 然而十六進制的色碼0xffffff很難直覺看懂是“白色”,故也算是一種魔術數字。
下面是一種拿掉魔術數字的方式。
例2 (修正):white = 0xffffff setColor("text", white)
像這樣,將魔術數字置換成常數或列舉型別是經常用來解決魔術數字問題的手段。由於常數可以賦予易懂的名稱,可使幫助閱讀者了解數值的意義。
當然,在程式初始化部分定義的常數列表不稱為魔術數字。