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不被视为魔法值。

你可能感兴趣的:(java,java)