魔法数字与常量定义

优化前代码

实例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为非魔法数字,其他的都会认为是魔法数字。

原文地址:https://www.cnblogs.com/erfsfj-dbc/p/11430301.html