Coding style 应该';如果';语句始终具有';其他';条款

Coding style 应该';如果';语句始终具有';其他';条款,coding-style,Coding Style,这可能是一个宗教论点,但在我的工作中,所有IF语句是否都应该包含ELSE子句一直在争论,即使ELSE子句只包含一条注释,说明它是“故意留白的” 我听到了双方的观点: “For”阵营-确保代码实际解决了条件是否需要ELSE子句的问题 “反对”阵营的代码更难阅读,增加了太多的噪音 我对任何其他观点都感兴趣,因为我必须以双方都满意的答案来解决这场辩论 谢谢你的帮助 顺便说一句:我在StackOverflow中搜索了这个问题的答案,但没有找到答案。如果有,只需包含一个链接并关闭即可。谢谢。对我来说打字好

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

我听到了双方的观点: “For”阵营-确保代码实际解决了条件是否需要ELSE子句的问题 “反对”阵营的代码更难阅读,增加了太多的噪音

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

谢谢你的帮助


顺便说一句:我在StackOverflow中搜索了这个问题的答案,但没有找到答案。如果有,只需包含一个链接并关闭即可。谢谢。

对我来说打字好像没用。。。以及可能引起混乱的原因。如果你不需要它,就不要放它

正如您所说,这可能是一个风格问题,但我不会梦想在代码中加入空的else块,因为“每个if块都应该有一个”。在我看来,它只在代码中增加了一些字符,在代码审查期间增加了一点时间(价值很小)。

否。如果不需要在
else
端运行任何代码,则不需要
else
子句。

否。保护条件就是一个很好的例子。您可以将方法逻辑的其余部分嵌套在else子句中,但它很快就会变得丑陋

“确保代码实际 解决了是否存在这种情况 需要一个ELSE子句“


这并不比在每个方法中都要求catch子句来确保所有可能的异常都得到了正确处理更正确。

您是在谈论Algol派生语言吗


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

黄金法则:如果它能让您的代码更清晰、更容易理解,就把它放进去,否则就不放进去。一个有经验的程序员将能够根据具体情况做出这些判断。

如果您的代码足够复杂,这会成为一个问题,您可能应该重新思考解决问题的方法。将您正在做的事情分解为更小更简单的函数,在这些函数中,if语句所做的事情应该非常明显

如果不能将其分解为更小的函数,或者发现自己将多个If语句嵌套在另一个If语句中,那么将If语句用于条件逻辑可能并不合适。考虑开关、查找表(如果条件之间的唯一差异是某个常数的值),或者是决策表,则


如果你已经做了所有这些,那么你就在为一些难以置信的琐事而争吵,你根本不值得花时间去争论。

需要一个
否则的
就糟透了。需要时使用它。所有程序员都理解缺失的
else
的结构和含义。这就像一条毫无意义的注释,呼应着代码。这在我看来简直是愚蠢透顶。

这可能是个好主意的少数几种情况之一,就是有几个嵌套的
if
语句,但
else
子句较少。如果
else
匹配,语言将指定哪个
,但读者可能并不总是清楚。当然,如果将内容放在花括号中,嵌套将是显而易见的,因此没有歧义。这使得这有点像是一个人为的例子,但仍然可能值得一提。此外,如果您的代码如此复杂,可能有一种更清晰的编写方法。

这里的回答清楚地表明,没有人觉得需要一个未使用的代码。我从未听说过或读过这样的事。摆在你面前的更重要的问题是与同事/开发人员打交道,他们以某种方式坚信这就是如何使用If-Then

听起来你不是这个场景中的高级人员,所以你不能简单地命令它是这样的。我建议让“空的其他方”在一本关于开发的书(博客不算在内)中说明这样一个过程的建议。更好的是,在3本关于发展的书中。自1982年以来,我一直在阅读各种编程语言的编程书籍,我从未见过这样的建议

这样你就不会告诉他们他们错了,他们可能会认为这是个人的错误。相反,您愿意接受这样的职位,但希望看到一些文档。他们有责任找到证据。要么他们找到了答案,要么他们只能争辩说每一本编程书都是错的,而只有他们是对的

祝你好运。

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

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

所以在这之后你不应该写其他的

无论如何,在我看来,这使得阅读和理解代码变得更加困难。。写得越多,代码就越难理解

编辑: 以下是您请求的链接:
至少是SQL 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'.
您必须有一个有意义的语句,这意味着一个虚拟赋值或向客户机返回数据。我想我可以使用waitfordelay…

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

if (thereIsSomeThingToDoInTheElse)
{
    putAnElseClause();
}
else
{
    // intentionally left blank
}
if(inParam==null){
返回;
}
如果(参数值<0){
抛出新的ArgumentException(…,…);
}
//否则。。。从这里开始,我的if语句自我来到这里以来就更简单了。
当然,.NET4.0现在有了代码契约,这太棒了!但是,大多数语言还没有这样的功能,所以“早期的ifs”(因为缺少更好的术语)之所以伟大,正是因为它们消除了许多else子句和嵌套的ifs。我认为在高级语言中使用else子句是没有好处的。。。见鬼,即使是在组装中!这个想法是:如果你
if (inParam == null) {
  return;
}

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