Summary:你有一個字面數值,帶有特別含義。 創造一個常量,根據其意義爲它命名,並將上述的字面數值替換爲這個常量。數組
動機:性能
在計算科學中,魔法數(magic number)是歷史最悠久的不良現象之一。所謂魔法數是指擁有特殊意義,卻又不能明確表現出這種意義的數字。若是你須要在不一樣的地點引用同一個邏輯數,魔法數會讓你煩惱不已,由於一旦這些數發生改變,你就必須在程序中找到全部魔法數,並將它們所有修改一遍,這簡直就是一場噩夢。就算你不須要修改,要準確指出每一個魔法數的用途,也會讓你破費腦筋。測試
許多語言都容許你聲明常量。常量不會形成任何性能開銷,卻能夠大大提升代碼的可讀性。進行本項重構以前,你應該先尋找其餘替換方案。你應該觀察魔法數如何被使用,然後你每每會發現一種更好的使用方式。若是這個魔法數是個類型碼,請考慮使用Replace Type Code with Class;若是這個魔法數表明一個數組的長度,請在便利該數組的時候,改用Array.lenght()。spa
作法:it
1.聲明一個常量,令其爲本來的魔法數值。編譯
2.找出這個魔法數的全部引用點。重構
3.檢查是否可使用這個新聲明的常量來替換該魔法數。若是能夠,便以此常量替換之引用
4.編譯程序
5.全部魔法數都被替換完畢後,編譯並測試。此時整個程序應該運轉如常,就像沒有作任何修改同樣。im
à有個不錯的測試辦法:檢查如今的程序是否能夠被你輕鬆地修改常量值(這可能意味着某些預期結果將有所改變,以配合這一新值。實際工做中並不是老是能夠進行這樣的測試)。若是可行,這就是一個不錯的手法。