一个函数是否只有一个返回语句?
为什么在一个函数中只有一个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