我喜欢每种方法只有一个return
语句的想法。
虽然你在这种情况下做了什么?
public static string ChopText(string Text)
{
if (String.IsNullOrEmpty(Text))
{
// return here ?????
}
}
我能想到的唯一选择是设置一个标志,然后检查标志。
问题是,我不喜欢有超过一页的巨大if语句。我也看到了丑陋的嵌套if语句。
答案 0 :(得分:36)
答案 1 :(得分:25)
坦率地说,这样的情况就是为什么过于严格的规则是不好的。
这样的规则要点是使代码更具可读性和可维护性,因此当它们使代码更难阅读时,应忽略它们。
这并不意味着该规则应该完全丢弃,因为大多数时候它确实使代码更具可读性。
答案 2 :(得分:8)
尝试每个函数只返回一次的代码要复杂得多。它通常是if-thens和作业的老鼠巢。我挑战你看看那种代码,并知道总是从那些不同的路径返回正确的值。没办法。
话虽如此,大型函数表明您可能需要将代码重构为更简单的函数。
答案 3 :(得分:7)
我个人认为
public static string ChopText(string Text))
{
if(String.IsNullOrEmpty(Text)
return Text;
...
}
完全没问题,如果你不喜欢那些,如果它变得越来越大。
答案 4 :(得分:4)
这是应该忽略规则的情况。如果传入的参数格式不正确,则在返回或抛出ArgumentException的方法的入口点处有多个guard子句是很常见的。只需将这些语句集中在方法的开头即可。
答案 5 :(得分:4)
“我喜欢每个方法只有一个return语句的想法。”解释
只要您知道传递给方法的参数无效,就应该返回或抛出异常。
为:
if (Valid) { do lots of stuff}
else {return};
清洁:
if (invalid) { return; }
if (invalid2) {return; }
另一种方法:
if (invalid) {
throws IllegalArgumentException();
答案 6 :(得分:2)
你必须权衡做这样的事情的成本和好处。只有一个return语句的好处是否会超过必须扭曲一个应该写起来相当简单的方法的缺点?
对于这种情况,我会拒绝。
答案 7 :(得分:2)
有了例外情况,无论如何都没有“单一条目 - 单一退出”规则,因此绝对不需要遵循严格的“一条退货声明”规则。理论上,控制流可以通过抛出异常并展开堆栈来随时退出函数,所以即使你实现了严格的“单一条目 - 单一退出”策略,也不能保证它会被遵循。
如果适合您,请随时退出该功能!
答案 8 :(得分:2)
一般来说,您的方法不应超过“一个屏幕”。如果他们这样做,你应该(通常再次)尝试将它们分成几种方法。这可能比“只有一个退货声明”更重要......
毕竟,我们正在寻找的是可读性。
答案 9 :(得分:1)
我坚信“一个入口/一个出口”,但验证函数顶部的输入除外。这必须在函数的实际工作开始之前发生。
我认为这条规则的目的是阻止人们在代码中间退出,因为他们认为自己已经“完成”了。
多次返回的问题是您无法确定是否会执行所需的退出处理,例如关闭套接字或释放其他资源。
答案 10 :(得分:1)
public static string ChopText(string Text)
{
string returnString = "";
if(String.IsNullOrEmpty(Text))
{
returnString = "return string text";
}
return returnString;
}
答案 11 :(得分:0)
该规则已过时。干净利落。它的存在是为了帮助糟糕的程序员编写更易读的代码......并且它适得其反。使你的代码变得小巧可读,并摆脱那种愚蠢的规则。
答案 12 :(得分:0)
我强烈反对“一个条目退出”导致复杂代码的想法。我刚刚在Java中编写了一个用于Blackberry和Android手机的应用程序,该应用程序包含大约100个文件,并且没有一种方法最终不会退出。虽然它是一个GUI应用程序和多线程,但没有任何代码是复杂的。几乎没有任何例程在屏幕上完全不可见。除了少数几种语言和操作系统之外,我一直在设计和编写软件46年,而对于我来说,“一个入口一个出口”使得代码非常简单,易于阅读和维护。我的价值0.02美元。对不起,如果我有任何羽毛。