为了避免出现幻数,我们经常听到我们应该给一个字面值一个有意义的名字。如:
//THIS CODE COMES FROM THE CLEAN CODE BOOK
for (int j = 0; j < 34; j++) {
s += (t[j] * 4) / 5;
}
-------------------- Change to --------------------
int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for (int j = 0; j < NUMBER_OF_TASKS; j++) {
int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
int realTaskWeeks = (realdays / WORK_DAYS_PER_WEEK);
sum += realTaskWeeks;
}
我有一个这样的虚拟方法:
说明:我想我有一个服务对象列表,默认情况下,我们只花5美元购买食物,但是当我们有一个以上的人时,我们需要购买水和食物,我们必须花更多的钱,也许是6美元。我将更改代码,请关注文字1,即我对此的疑问。
public int getMoneyByPersons(){
if(persons.size() == 1){
// TODO - return money for one person
} else {
// TODO - calculate and return money for people.
}
}
当我问我的朋友检查我的代码时,一个人说给值1命名会产生更简洁的代码,另一个人说这里不需要常量名,因为该值本身就有意义。
因此,我的问题是我应该为文字值1命名吗?值什么时候是幻数,什么时候不是?如何区分上下文以选择最佳解决方案?
if(getErrorCode().equals(4095)) ...
persons
来自哪里,它描述了什么?您的代码没有任何注释,因此很难猜测它在做什么。