如果“if”语句总是有一个“else”子句?

这可能是一个宗教论点,但是在我的工作中,这个争论是否所有的IF语句都应该包含一个ELSE子句,即使ELSE子句只包含一个注释,说明它被“故意留空”。

我已经听到双方的论点:“For”阵营 – 确保代码实际上解决了条件是否需要ELSE条款“反对”阵营代码难以阅读,增加了太多的噪音

我对任何其他观点都感兴趣,因为我必须以一个令双方满意的答案来解决这个辩论。

感谢您的帮助。

顺便说一句:我没有searchStackOverflow的答案,并无法find一个。 如果有的话,只是包括一个链接,并closures。 谢谢。

看起来好像对我无用的input…可能导致混淆。 如果你不需要它,不要把它!

不。如果你不需要在else方面运行任何代码,你不需要一个else子句。

这里的回答清楚地表明,没有人觉得没有其他人是需要的。 我从来没有听过也没有读过这样的事情。 在你和同事/开发者打交道的时候,更重要的问题是坚定地相信这是If Then如何被使用。

听起来你在这种情况下并不是高级人物,所以你不能简单地将它命令如此。 我build议要求“空的其他”方面展示一个书(博客不计算在内)关于发展的过程。 更好的是,在3本关于发展的书中。 自从1982年以来,我已经阅读了我在编程语言方面的编程书籍,我从未见过这样的build议。

这样你就不会告诉他们他们可以亲自做错了。 相反,你愿意接受这样的立场,但希望看到一些文件。 他们有责任find证据。 要么他们find它,要么就要争辩说,每一本编写的编程书都是错的,只有他们是正确的。

祝你好运。

黄金法则:如果它使你的代码更清晰,更容易理解,就把它放在其他地方。 有经验的程序员将能够根据具体情况做出这些判断。

你在谈论Algol派生的语言吗?

在Lisp中,我会说是的:每个IF都应该有一个else子句。 否则,你应该使用WHEN。

正如你所说,这可能是一个风格的问题,但我不会梦想在我的代码中放置空的块,因为“每个if块应该有一个”。 在我看来,除了代码中的更多字符以外,没有其他的东西可以添加,在代码审查期间花更多的时间( 非常less的价值)。

需要else臭味。 需要时使用它。 所有程序员都理解构造和else缺失的含义。 这就像一个回应代码的毫无意义的评论。 这是平淡的海事组织。

我倾向于使用“早if”语句来降低嵌套花括号(或Python中的缩进)的级别,如下所示:

 if (inParam == null) { return; } if (inParam.Value < 0) { throw new ArgumentException(...,...); } // Else ... from here on my if statements are simpler since I got here. 

当然,.Net 4.0现在有代码合同,这很好! 但是,大多数语言还没有这个function,所以“早期”(因为没有更好的术语)是非常重要的,因为它们消除了许多其他的子句和嵌套的ifs。 我认为在高级语言中有一个else子句是不利的,即使在汇编中也是如此! 这个想法是:如果你检查并没有跳,那么这个条件是错误的,我们可以继续。 对我来说是合乎逻辑的…

编辑:看看这篇文章,以及看看为什么else子句没有太大的帮助: http : //www.codinghorror.com/blog/2006/01/flattening-arrow-code.html

“确保代码实际上解决了条件是否需要ELSE子句”

这不是每个方法都要求使用catch子句,确保所有可能的exception都得到了正确的处理。

 if (thereIsSomeThingToDoInTheElse) { putAnElseClause(); } else { // intentionally left blank } 

至lessSQL Server 2000,2005。

 IF 1 = 1 BEGIN PRINT 'doing something productive' END ELSE BEGIN --Just sitting here END Msg 102, Level 15, State 1, Line 8 Incorrect syntax near 'END'. 

你必须有一个有意义的陈述,这意味着虚拟分配或返回数据给客户端。 我想我可以使用WAITFOR DELAY …

没有。守卫条件是一个很好的例子。 你可以将其余的方法逻辑嵌套在else子句中,但它可能会很快变得丑陋。

哈斯克尔的如果总是三元的。 所以别的是强制性的。

如果你的代码足够复杂,这成为一个问题,你应该重新思考你的问题的方法。 把你正在做的事情打破成更小的简单函数,这些函数应该是令人难以置信的,如果if语句正在做什么。

如果你不能把它分解成更小的函数,或者你发现自己嵌套了另外一个if语句,那么使用if语句作为你的条件逻辑可能不是一个好的select。 考虑交换机,查找表(如果你的条件之间的唯一区别是一些常数的值)或决策表。

如果你已经完成了所有这些,那么你正在讨论一些如此令人难以置信的小事情,这几乎不值得花时间去争论。

这可能是一个好主意的less数可能的情况之一是你有几个嵌套的if语句,但更less的else子句。 该语言将指定if else匹配,但这可能并不总是清楚的读者。 当然,如果你把内容放在大括号中,嵌套将是显而易见的,所以没有歧义。 这使得这是一个假的情况,但仍然可能值得一提。 另外,如果你的代码很复杂,那么可能有更清晰的写法。

只有代码注释的空行的“else”通常意味着开发人员可以通过条件来思考,并且更好地了解在给定时间实际执行的path。 所有最近的编译器都会删除“else”和注释,所以你不会减慢软件的执行速度。

除非我不正确地阅读其他答案,否则看起来大多数人反对在代码中声明自己的想法所花的时间,而宁愿这样做。

有很多“单词”告诉你如DRY编程的方式

在这种情况下,我会使用YAGNI ..你不会需要它..

所以下面这个你不应该写其他的。

无论如何,在我看来,这使得阅读和理解代码变得越来越难……越是越难以理解代码

编辑:这里是您请求的链接: http : //en.wikipedia.org/wiki/YAGNI http://en.wikipedia.org/wiki/Don%27t_repeat_yourself

有些情况下,在不需要时使用可选的语法元素可以提高可读性或防止将来的错误。 一个典型的情况是围绕一个句子条件的括号:

 if(foo){ bar } 

代替

 if(foo) bar 

最终可能会阻止

 if(foo) bar dot 

我不能真正想到我知道的任何语言,省略不必要的其他语言都会导致潜在的错误: