zoukankan      html  css  js  c++  java
  • 魔法数字与常量定义

    优化前代码

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

  • 相关阅读:
    【原创】Zend Framework 2框架之MVC
    poj3101--Astronomy(分数的最小公倍数)
    【c语言】输入一个递增排序的数组的一个旋转,输出旋转数组中的最小元素
    Java中&、|、&&、||详解
    编写webpack 插件
    Babel 入门教程
    Eslint 规则说明
    npm模块之http-proxy-middleware使用教程(译)
    sass和less的几点不同
    babel的使用(关于使用async报错的问题)
  • 原文地址:https://www.cnblogs.com/erfsfj-dbc/p/11430301.html
Copyright © 2011-2022 走看看