我已经看到了类似的问题,但是当人们觉得使用多个return语句不合适时,我想要更清楚一些。 (我相信这是一个与语言无关的问题)
我总是非常努力地确保方法总是只有一个退出语句。
示例:
doSomething: function() {
for (var i = 0; i < 10; i++) {
if (objCars[i].color == "red") {
this.carIndex = i;
return true;
}
}
return false;
}
以前我会重写这样的东西:
doSomething: function() {
var bResult = false;
for (var i = 0; i < 10; i++) {
if (objCars[i].color == "red") {
this.carIndex = i;
bResult = true;
break;
}
}
return bResult;
}
现在我知道有些情况下我可以完全跳过整个函数/方法,通过检查并在开头返回...但在这样的情况下......最好坚持单个退出语句,或者,即使在这种情况下它是否真的没有提高代码的可读性?
谢谢, -Stephen
答案 0 :(得分:0)
在该特定示例中,第一个选项更有效,因为它在第一次找到红色汽车时退出循环。 我个人更喜欢每个功能一次返回,特别是如果它是一个很长的方法。
对于这种情况,我会这样做:
doSomething: function() {
var i = 0;
while (i < 10 && objCars[i].color != "red") {
this.carIndex = i;
i++
}
return i < 10;
}
希望有所帮助
答案 1 :(得分:0)
在这种情况下,我发现单一的return语句更加清晰。
你马上知道,因为函数在if块中返回,它只会给出一个值。乍一看,在第二个示例中很难说该函数是否正在构建要返回的值列表。在非类型语言中尤其如此。
您还可以提高性能,因为一旦找到有效值,就会阻止代码循环。在第一个示例中,您可以在单个迭代中运行for循环,而单个迭代将始终运行所有10个迭代。您可以通过更改循环的条件来防止这种情况,但这会使代码在许多不相关的位置访问变量时更加震撼。
从历史的角度来看,很多人坚持单一返回声明的原因是为了帮助调试。由于该函数只有一个出口点,因此很容易在那里添加断点以查看返回的结果。这在现代调试器中得到了极大的缓解,它能够查看函数的返回值,以及在调用函数之前将返回值存储在变量中之前。