一个函数是否只有一个返回语句?

为什么在一个函数中只有一个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