拥抱质量:代码质量 之 魔鬼数字

来源:互联网 发布:北京美工集团玉印 编辑:程序博客网 时间:2024/06/10 00:31

最近致力于改善团队质量,原来说过,真正去看代码的时候让我“ ”喜连连,惊的可不是一点半点。
对照重构中的很多经典“bad smell”,我截取产品中的典型代码,发在内部讨论组上,
分享在这里,看有没有人感兴趣:

 

魔鬼数字 magic number

出现频率:         五颗星

杀伤力:             四颗星

预防难度:         两颗星

 

 

魔鬼数字的定义:

直接写死在程序代码中,且不是用来给变量赋值的数字。

例如:

int itemCount=10;                  // 这可以认为不是魔鬼数字 ,但应该有注释

       int itemSize=5;                    //   这可以认为不是魔鬼数字 ,但应该有注释

       // 一系列处理逻辑后

       if ((storageManager.getCapacity() - itemCount*itemSize) < 1024){   //1024 是魔鬼数字

           storageManager.expandCapacityBy(512);     //512 是魔鬼数字

     }

 

魔鬼数字的危害:

魔鬼数字不会带来程序逻辑的错误,它主要影响 代码可读性,读者看到的数字无法理解其含义,从而难以理解程序的意图。

当程序中出现的魔鬼数字量过多时,代码的可维护性将会急剧下降,代码变得难以修改,并容易引入错误。

 

解决方案:

1、   将魔鬼数字定义为常量

例如,将:

storageManager.expandCapacityBy(512);

改成:

public static final int CAPACITY_INCREASE_STEP=512;

storageManager.expandCapacityBy(CAPACITY_INCREASE_STEP);

 

2、   将使用魔鬼数字的逻辑封装为方法,增加注释

例如,将:

if ((storageManager.getCapacity() - itemCount*itemSize) < 1024){

改成:

if ( storageManager.needIncreaseCapacity(itemCount,itemSize)){

 

boolean storageManager.needIncreaseCapacity(int itemCount,int itemSize){

    return (storageManager.getCapacity() - itemCount*itemSize) < 1024;// 当剩余容量小于 1024 字节时,需要扩充空间。

}

 

魔鬼数字真实片段:

 

1 我相信,如下代码换一个人来接手,肯定很晕

 

 

2、  下面的代码做了剪裁,但依然很有震撼力,试问,此码既出,谁敢接手?

 

原创粉丝点击