'if'语句是否应该总是有'else'子句?

Jac*_*ack 60 coding-style

这可能是一个宗教论点,但在我的工作中一直争论是否所有IF语句都应该包含一个ELSE子句 - 即使ELSE子句只包含一条注释表明它是'故意留空'.

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

我对任何其他观点感兴趣,因为我必须以满足双方的答案来解决这场辩论.

谢谢您的帮助.

顺便说一句:我确实搜索了StackOverflow以获得答案,但却无法找到答案.如果有,只需包含一个链接并关闭.谢谢.

jld*_*ont 138

对我来说似乎无用的打字......以及可能造成混淆的原因.如果你不需要它,不要把它!

  • 更多打字=错误的机会更多! (5认同)
  • 为每个条件语句编写一个“else”块表明您已经考虑了“假设”,即使“else”块为空。我认为这对于安全/可靠性原因很重要。 (3认同)

Rob*_*vey 46

不.如果您不需要在else侧面运行任何代码,则不需要else条款.


dre*_*ful 32

这里的回答很清楚,没有人觉得需要一个未使用的其他人.我从未听过或读过这样的事情.在你与同事/开发人员打交道之前,更重要的问题是,他们坚定地相信这就是如何使用If Then.

听起来你不是这个场景中的老人,所以你不能简单地判断它是如此.我建议要求"空的其他"方面显示在一本关于开发的书中(博客不计)这样的过程.更好的是,在3本关于发展的书中.自1982年以来,我已阅读了编程语言的编程书籍,我从未见过这样的建议.

这样你就不会告诉他们他们错了,他们可以采取个人行为.相反,你愿意接受这样的立场,但希望看到一些文件.他们有责任找到证据.要么是他们找到了,要么他们只是争辩说,每一本编写的编程书都是错的,只有他们是对的.

祝好运.


Tim*_*Tim 15

黄金法则:如果它使您的代码更清晰,更容易理解,请将其放入,否则将其留下.经验丰富的程序员将能够根据具体情况做出这些判断.

  • @ Woot4Moo:一个可能为空的else块如何向其他人展示你的逻辑? (12认同)

Ken*_*Ken 14

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

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


Fre*_*örk 11

正如你所说,这可能是一个风格问题,但我不会梦想在我的代码中插入空的else块只是因为"每个if-block都应该有一个".在我看来,除了代码中的更多字符之外,它还添加了一些其他内容,并且在代码审查期间花费更多时间(非常少的价值).


spe*_*der 8

需要一个else臭味.需要时使用它.所有程序员都理解缺失的构造和含义else.这就像一个无意义的评论,回应了代码.这是愚蠢的IMO.


Ham*_*jan 8

我倾向于使用"early 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.
Run Code Online (Sandbox Code Playgroud)

当然,.Net 4.0现在有代码合同,这很棒!但是,大多数语言还没有,所以"早期ifs"(缺乏更好的术语)非常精确,因为它们消除了许多其他条款和嵌套ifs.我不认为在高级语言中使用else子句是有益的...即使在汇编中也是如此!这个想法是:如果你检查并且没有跳,那么条件是错误的,我们可以继续.对我来说具有逻辑意义......

编辑:看看这篇文章,看看为什么else条款没有多大帮助:http: //www.codinghorror.com/blog/2006/01/flattening-arrow-code.html


pea*_*dog 6

不,卫队条件是一个很好的例子.您可以将其余的方法逻辑嵌套在else子句中,但它可能会很快变得难看.


Mic*_*tta 6

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

这不仅仅是要求每个方法中的catch子句确保已正确处理所有可能的异常.


Sno*_*owy 5

有一个只有空行代码注释的“else”通常意味着开发人员仔细考虑了条件,并更好地了解在给定时间实际采用的执行路径。所有最近的编译器都将删除“else”和注释,因此您不会减慢软件执行速度。

除非我错误地阅读了其他回复,否则看起来大多数人都反对在代码中声明他们的想法所花费的时间,而宁愿这样做。