魔術數字

魔術數字,是程式設計中所謂的直接寫在程式碼里的具體數值。

魔術數字(magic number)是程式設計中所謂的直接寫在程式碼里的具體數值(如“10”“123”等以數字直接寫出的值)。雖然程式作者寫的時候自己能了解數值的意義,但對其他程式員而言,甚至製作者本人經過一段時間後,會難以了解這個數值的用途,只能苦笑諷刺“這個數值的意義雖然不懂,不過至少程式會動,真是個魔術般的數字”而得名。
因為下述理由,一般認為程式碼中不應該含有魔術數字。
一、數值的意義難以了解
二、數值需要變動時,可能要改不只一個地方
回到頂部舉例
例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)
像這樣,將魔術數字置換成常數或列舉型別是經常用來解決魔術數字問題的手段。由於常數可以賦予易懂的名稱,可使幫助閱讀者了解數值的意義。
當然,在程式初始化部分定義的常數列表不稱為魔術數字。

熱門詞條

聯絡我們