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

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

最近致力于改善团队质量,原来说过,真正去看代码的时候让我“惊 ”喜连连,惊的可不是一点半点。对照重构中的很多经典“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、 下面的代码做了剪裁,但依然很有震撼力,试问,此码既出,谁敢接手?

相关推荐

平战结合,宁波“地下商业王国”彰显人防元素
365bet体育足球比分

平战结合,宁波“地下商业王国”彰显人防元素

📅 06-29 👁️ 3680
简析神武卡30技巧 选择门派与攒神武币
best365网页版登录官方网

简析神武卡30技巧 选择门派与攒神武币

📅 07-07 👁️ 6868
翁虹分享异地婚姻生活,夫妻一年见一次如牛郎织女维系感情
best365网页版登录官方网

翁虹分享异地婚姻生活,夫妻一年见一次如牛郎织女维系感情

📅 07-29 👁️ 4982