最佳实践 - 多个退货声明

时间:2014-11-10 20:45:02

标签: javascript

我已经看到了类似的问题,但是当人们觉得使用多个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

2 个答案:

答案 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个迭代。您可以通过更改循环的条件来防止这种情况,但这会使代码在许多不相关的位置访问变量时更加震撼。

从历史的角度来看,很多人坚持单一返回声明的原因是为了帮助调试。由于该函数只有一个出口点,因此很容易在那里添加断点以查看返回的结果。这在现代调试器中得到了极大的缓解,它能够查看函数的返回值,以及在调用函数之前将返回值存储在变量中之前。