题
我喜欢每方法仅具有一个return
语句的想法。
你怎么在这种情况下,虽然做?
public static string ChopText(string Text)
{
if (String.IsNullOrEmpty(Text))
{
// return here ?????
}
}
我能想到的唯一的替代方法是设置一个标志,然后检查该标志。
问题是,我不喜欢巨大的,如果跨越多页的陈述。我也看到了丑陋的嵌套的if语句这样的结果。
解决方案
有行来替换嵌套条件具有保护子句的。
其他提示
坦率地说,这样的情况是为什么过于严格的规则是不好的。
的这样规则的点是使代码的可读性和维护,因此,当他们使较硬的代码来读取它们应该被忽略。
这并不意味着该规则应完全丢弃,因为大部分时间它使代码更具有可读性。
,试图仅具有每个函数一个返回码是复杂得多。它通常是如果-thens和任务的老鼠窝。我挑战你看那种代码,并知道正确的值总是被那些不同的路径返回。没有办法。
说了这么多,大型活动表明您可能需要将代码重构为更小的简单功能呢。
我个人认为
public static string ChopText(string Text))
{
if(String.IsNullOrEmpty(Text)
return Text;
...
}
是完全好的,如果你不喜欢这些,如果是渐大。
“我喜欢只具有1每方法返回语句的想法”。解释
只要你知道,传递给方法的参数是无效的,你应该返回或抛出异常。
为:
if (Valid) { do lots of stuff}
else {return};
清洁:
if (invalid) { return; }
if (invalid2) {return; }
另一种方法:
if (invalid) {
throws IllegalArgumentException();
这是该规则应当被忽略的情况。这是常见的入口点返回或引发ArgumentException如果传入的参数是不正确的格式的方法有几个后卫条款。只要保持这些语句在你的方法开始聚集。
您真的要权衡成本,做这样的事情的好处。将只有一个return语句的好处大于不必扭曲,应该是相当简单写一个方法的缺点?
我没有去针对这种情况。
有了异常也没有“单一入口 - 单退出”排除任何更反正,所以完全没有必要遵循严格的“一个return语句”的规则。控制流可以 - 理论上 - 抛出一个异常,并展开堆栈退出功能的任何时间,因此,即使你实行严格的“单一入口 - 单退出”政策也不能保证,这将是在所有遵循
随意在任何时候退出功能,如果它适合你!
您的方法应该统称,但不得跨越多于“一分屏”。如果他们这样做,你应该(一般再次)试图把它们分成几种方法。这大概是目前为止比拥有更重要“只有一个return语句” ...
毕竟,我们要找的是什么可读性。
我坚信在“一个条目/一个出口”,用在函数的顶部验证输入的除外。这已发生功能的真正的工作开始之前,虽然
我认为这条规则是为了在那在做实际工作仅仅是因为他们认为他们是“完成”。
代码中间退出阻止人们具有多个返回的问题是,不能确保所需的退出处理将被执行,诸如关闭套接字或释放一些其它资源。
public static string ChopText(string Text)
{
string returnString = "";
if(String.IsNullOrEmpty(Text))
{
returnString = "return string text";
}
return returnString;
}
该规则是过时的。干净利落。它的存在是为了帮助糟糕的程序员编写更可读的代码......它事与愿违。使你的代码小和可读性,摆脱那个愚蠢的规则。
我强烈的想法,“一个入一出”导致复杂的代码不同意。我刚刚写了Blackberry和Android手机在Java中包含大约100个文件并没有说在年底不会退出单一方法的应用程序。虽然这是一个GUI应用程序和多线程无代码的复杂。几乎没有任何程序都没有在他们的屏幕上全部可见。我一直在设计和46年,但在所有的语言和操作系统少数编写软件,并为我“一个入一出”使得非常简单,易于阅读和维护的代码。我的$ 0.02的价值。很抱歉,如果我已经竖起任何羽毛。