魔法數字與常量定義


優化前代碼

實例1

動動腦筋:本例代碼中有哪些瑕疵,應該如何優化?

☆代碼1:Before類

  1. 1  package com.itedu365.best1201;  
  2. 2  public class Before {  
  3. 3      public static void method(int type) {  
  4. 4          // 白色  
  5. 5          if (type = = 10) {  
  6. 6              System.out.println("I am white!");  
  7. 7          // 黑色  
  8. 8          } elseif (type = = 20) {  
  9. 9              System.out.println("I am black!");  
  10. 10          }  
  11. 11      }  
  12. 12  } 

現象類別

變量。

現象描述

魔法數字(Magic Number)是指擁有特殊意義,卻又不能明確表現出這種意義的數字。程序里面存在大量這種難以閱讀的數字。

不利影響分析

魔法數字是臭名昭著的劣質代碼現象之一。如果需要在不同的地點引用同一個邏輯數,就會給程序員帶來***的煩惱。一旦這些數發生變化,我們就要在程序中找到所有引用的地方,並將它們全部修改。即使不修改,僅僅是調查分析,要准確指出每個魔法數字所在的位置,也會讓程序員心寒吐血。

檢測工具或方法

(C)Magic Number。

***解決方案

魔法數字的替換手段一般有以下三種:

① 當不是類型碼的時候,考慮使用常量代替--用本例優化技巧04(用常量取代魔法數)。

② 當是有限個數的類型碼時,考慮使用枚舉代替--參照用優化技巧05(用枚舉取代類型碼)。

③ 當是不定個數的類型碼時,考慮使用類代替--參照優化技巧08(用多態代替條件表達式)。

優化技巧04:用常量取代魔法數字

優化類別

優化數據結構。

實施方法

對魔法數字進行優化之前,要分析魔法的特征。如果這個魔法數字不是代表的類型碼時,要用常量來代替。

常量不會造成任何性能開銷,卻可以大大提高代碼的可讀性。

優化后代碼

實例1  優化后

☆代碼2:Consts類

  1. 1  package com.itedu365.best1202;  
  2. 2  public class Consts {  
  3. 3      public static int COLOR_WHITE_10 = 10;  
  4. 4      public static int COLOR_BLANK_20 = 20;  
  5. 5  } 

☆代碼3:After類

  1. 1  package com.itedu365.best1202;  
  2. 2  public class After {  
  3. 3      public static void method(int type) {  
  4. 4          // 白色  
  5. 5          if (type = = Consts.COLOR_WHITE_10) {  
  6. 6              System.out.println("I am white!");  
  7. 7          // 黑色  
  8. 8          } elseif (type = = Consts.COLOR_BLANK_20) {  
  9. 9              System.out.println("I am black!");  
  10. 10          }  
  11. 11      }  
  12. 12  } 

解析:

代碼1中,第5行賦予了臨時變量type數字10,這個10就是魔法數字。一般來說,系統會默認0與1為非魔法數字,其他的都會認為是魔法數字。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM