Java中的魔法值概念

想象一下,当你入职一家新公司,打开工具看以前同事的项目时,突然看到下面这段代码

String[] catNames = new String[7];
String[] dogNames = new String[7];
for(int i = 0; i < 7; i++) {
	//此处省略若干行
}

你心中一定很凌乱,可能还会在心底默默问候下写这段代码的前同事。
在没有注释的情况下,此处的i < 7,你根本无法知道是要处理 dogNames数组还是catNames数组,你还要继续去看循环体中的内容才能来推断这个数字的含义。这里的7就是魔法值。

所谓的魔法值,就是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义。

魔法值简单好用,任何项目基本上都会有魔法值的出现。但魔法值就像一段没有注释的代码,它的出现使得程序的可读性大大下降,甚至只有当事人才知道。这对于项目或者别的开发来说,无疑都是不利的。同时,如果到处用到魔法值,那需要修改的时候,就要修改很多地方,这不仅耗费时间,还很容易会遗漏。

魔法值的问题就是含义不明且无法统一使用,要把它们统一表示,并加上注释,我们可以用static final 定义常量或使用enum值。

static final int CAT_NUM = 7;
String[] catNames = new String[CAT_NUM];
for(int i = 0; i < CAT_NUM; i++) {
	//此处省略若干行
}
for(int i = 0; i < PET.DOG.getNum(); i++) {
	//此处省略若干行
} 

当然此处用catNames.length,dogNames.length也不会引起混淆。

其实魔法值也并不是要完全禁止不用,毕竟每次用到数值就要去定义常量或者在enum中新增元素还是很麻烦的。只要保障你的数值不会让别人难以阅读,你就可以使用魔法值。一般 -1、0 和 1不被视为魔法值。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值