背景
使用IDEA时,启用了阿里的代码规范检查,其中就有一项提示是不允许任何魔法值出现在代码里,于是出于好奇就了解一下到底啥时魔法值。
介绍
魔法数值、魔法数字、魔法值,这是一个东西,不同的叫法。
魔法数字,在编程领域指的是莫名其妙出现的数字。数字的意义必须通过详细阅读才能推断出来
if("1".equals(dangerKey)){
BigDecimal warningValue = new BigDecimal(JedisUtils.get(WARNING_VALUE_KEY));
model.addAttribute("isDanger", true);
model.addAttribute("warningValue", warningValue);
}
上面代码中的字符串1就是一个魔法值,在未读整段代码之前,我并不知道这个字符串1代表什么意思,只有把这个字符串带入后面的代码逻辑才能判断该值的真实意义,而且如果多次出现,这就大大的降低了代码的可阅读性。所以我们在代码中应该极力避免产生魔法值。
解决方法
** 使用枚举类型或者使用static final修饰常量 **
//预警值标识
public static final String DANGERKEY_TRUE ="1";
if(DANGERKEY_TRUE.equals(dangerKey)){
BigDecimal warningValue = new BigDecimal(JedisUtils.get(WARNING_VALUE_KEY));
model.addAttribute("isDanger", true);
model.addAttribute("warningValue", warningValue);
}
以上就是使用static final的方式替换的魔法值,这样就可以避免了。如果在代码中多次使用的话,只需更声明的地方就可以达到全局的效果。
提示:静态常量的命名最好全是大写字母,如果是多个单词需要分割,可以使用下划线分割。
总结
魔法值的问题对于代码逻辑来说,并不是什么要命的事情,即使不修改也基本不影响代码的正常运行,我以前没有安装阿里代码检查规范时,一样这么使用,也没出现过啥问题。好吧,应该说但是了。但是,遵循公认的代码规范,可以有效的避免开发过程的一些小问题(最让人头疼的往往都是一些小问题引起的),提升开发的效率和代码的可阅读性,老老实实按照规范来,自然就会受益良多,继续加油!