此方法:
boolean containsSmiley(String s) {
if (s == null) {
return false;
}
else {
return s.contains(":)");
}
}
可以等效地写成:
boolean containsSmiley(String s) {
if (s == null) {
return false;
}
return s.contains(":)");
}
根据我的经验,第二种形式更常见,特别是在更复杂的方法中(可能有几个这样的退出点),对于“抛出”和“返回”也是如此。然而,第一种形式可以说使代码的条件结构更加明确。有什么理由更喜欢其中之一吗?
发布于 2010-07-16 12:20:45
根据我的经验,这取决于代码。如果我在“防范”某件事,我会这样做:
if (inputVar.isBad()) {
return;
}
doThings();
要点很清楚:如果这句话是假的,我不希望函数继续执行。
另一方面,有些函数有多个选项,在这种情况下,我会这样写:
if (inputVar == thingOne) {
doFirstThing();
} else if (inputVar == secondThing) {
doSecondThing();
} else {
doThirdThing();
}
即使它可以写成:
if (inputVar == thingOne) {
doFirstThing();
return;
}
if (inputVar == thingTwo) {
doSecondThing();
return;
}
doThingThree();
return;
这实际上归结于哪种方式最能清楚地显示代码正在做什么(不一定哪一位代码最短或缩进最少)。
发布于 2010-07-16 12:08:03
这种情况下的else
将是冗余的,并且会为函数的主代码创建不必要的额外缩进。
发布于 2010-07-16 12:19:21
这是一种称为Guard Clause的模式。这个想法是在前面做所有的检查,以减少嵌套条件,增加可读性。
从链接:
double getPayAmount() {
double result;
if (_isDead) {
result = deadAmount();
} else {
if (_isSeparated) {
result = separatedAmount();
} else {
if (_isRetired) {
result = retiredAmount();
} else {
result = normalPayAmount();
}
}
}
return result;
}
使用Guard子句,您将看到以下结果:
double getPayAmount() {
if (_isDead) return deadAmount();
if (_isSeparated) return separatedAmount();
if (_isRetired) return retiredAmount();
return normalPayAmount();
};
https://stackoverflow.com/questions/3261849
复制相似问题