• 魔法数字与常量定义


    优化前代码

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

  • 相关阅读:
    项目选题报告答辩总结
    项目UML设计(团队)
    项目选题报告答辩总结
    第七次作业
    结对第二次
    第四次作业
    alpha冲刺4
    alpha冲刺3
    alpha冲刺2
    alpha冲刺1
  • 原文地址:https://www.cnblogs.com/erfsfj-dbc/p/11430301.html
Copyright © 2020-2023  润新知