一个函数是否只有一个返回语句?
为什么在一个函数中只有一个return语句是一个更好的做法,是否有很好的理由?
或者,只要逻辑上正确地返回函数就可以返回,这意味着函数中可能有很多返回语句?
在方法开始时,我经常会有几个陈述返回“简单”情况。 例如,这个:
public void DoStuff(Foo foo)
{
    if (foo != null)
    {
        ...
    }
}
...可以变得更可读性(恕我直言)这样:
public void DoStuff(Foo foo)
{
    if (foo == null) return;
    ...
}
所以是的,我认为从函数/方法中获得多个“退出点”是很好的。
没有人提到或引用Code Complete,所以我会做。
17.1回报
最小化每个例程中的返回次数 。 如果在底部阅读它,你不会意识到它返回到上面某处的可能性,这很难理解一个例程。
提高可读性时使用返回 。 在某些例程中,一旦知道了答案,就要立即将其返回给调用例程。 如果例程定义为不需要任何清理,则不立即返回意味着您必须编写更多代码。
我可以说,任意决定多个退出点是非常不明智的,因为我发现该技术一遍又一遍地在实践中有用,事实上,为了清楚起见,我经常将现有代码重构为多个退出点。 我们可以比较这两种方法: -
string fooBar(string s, int? i) {
  string ret = "";
  if(!string.IsNullOrEmpty(s) && i != null) {
    var res = someFunction(s, i);
    bool passed = true;
    foreach(var r in res) {
      if(!r.Passed) {
        passed = false;
        break;
      }
    }
    if(passed) {
      // Rest of code...
    }
  }
  return ret;
}
将此与允许多个退出点的代码进行比较: -
string fooBar(string s, int? i) {
  var ret = "";
  if(string.IsNullOrEmpty(s) || i == null) return null;
  var res = someFunction(s, i);
  foreach(var r in res) {
      if(!r.Passed) return null;
  }
  // Rest of code...
  return ret;
}
我认为后者是相当清楚的。 据我所知,现在对多个出口点的批评是一个相当古老的观点。
链接地址: http://www.djcxy.com/p/33811.html上一篇: Should a function have only one return statement?
下一篇: Django: custom users
