在不需要的情况下,是否应该保留或删除?

时间:2010-08-20 18:30:30

标签: coding-style if-statement

这是一个微不足道的问题,但我一直在想。

就风格而言(我假设表现相同),在没有必要的if语句中保留'else'会更好吗?

例如,以下哪项更好:

if (x < 10)
  doSomething();
 else if (x > 20)
  doSomethingElse();

if (x < 10)
 doSomething();
if (x > 20)
 doSomethingElse();

另一个案例:

if (x < 10)
 return;
else doSomething();

if (x < 10)
 return;
doSomething();

谢谢,

6 个答案:

答案 0 :(得分:5)

在第一个示例中,明确保留else - 如果第一部分为真,则会阻止额外评估。

(即如果你这样做:

    if (x < 10) 
     doSomething(); 
   if (x > 20) 
    doSomethingElse();

这两个ifs 始终评估。

但是,如果你这样做:

if (x < 10)
  doSomething();
else if (x > 20)
  doSomethingElse();

第二部分仅在第一部分为假时进行评估。 [如果x&lt; 10,你甚至不想检查x&gt; 20,这是浪费评估......])

第二个是个人设计决定;选择哪个更吸引你,更符合特定的逻辑,或者如果有的话,遵循你公司的标准。

答案 1 :(得分:5)

将它们留在可以提高代码清晰度的位置。在第一个示例中,保留其他内容,因为它略有不同,从而保存了评估。第二种情况不那么明确;通常我会在返回后使用elses进行备用情况,但是当返回用于错误处理时,请忽略else。

答案 2 :(得分:1)

一般来说,我会远离任何不必要的东西。更多代码意味着更多的错误空间。

但是,如果程序流程不需要的代码使得阅读它的人更清楚,那么毕竟可能是必要的。

在你的第一个例子中,没有数字小于10且大于20,但有时逻辑不那么明显。 else使得很容易看出这些条件是同一代码块的一部分,因此应该包括在内。

你的第二个例子中的其他内容实际上并没有改变程序的流程,所以它确实没有必要。实际上,您可能会考虑重新编写逻辑:

if(x>10){
    doSomething;
}

现在你甚至不必担心return语句或额外的else块。

编辑:添加括号..为了图灵的缘故!

答案 3 :(得分:1)

如果您在多行中断if语句,那么为了图灵的缘故,请使用括号!所以:

if (x < 10) return;

或者

if (x < 10) {
    return;
}

但不是

if (x < 10)
    return;

else问题是主观的,但我对此的看法是,if / else在概念上将您的代码分解为或多或少相等的情况。您的第一个示例是处理两个概念相似但互斥的情况,因此我发现else是合适的。有两个单独的if语句,乍一看似乎两个条件是独立的,它们不是。

当您return if时,情况就不同了。这些案例自动互斥,因为return将阻止其他代码运行。如果替代案例(没有返回)很短,特别是如果它也返回,那么我倾向于使用else。如果通常情况下替代代码很长或很复杂,那么我不使用else,将if视为更多的保护条款。

这主要是清晰度和可读性问题,这两个因素都是主观的。

答案 4 :(得分:1)

在一些平台上,代码有时可以在省略'else'语句的情况下更快地执行。例如:

  if (a & 1)
    b |= 2;
  if (!(a & 1)
    b &= ~2;

将为Microchip PIC生成四条指令,并以恒定的四个周期执行。另一种选择:

  if (a & 1)
    b |= 2;
  else
    b &= ~2;

需要五条指令,执行时间为四或五个周期,具体取决于(a&amp; 1)是否为真。

除非您知道留在“冗余”测试中会使您的代码更快,否则请使用'else'语句来消除它们。

答案 5 :(得分:0)

作为一般规则,请始终将它们保留,并添加注释以确定其原因,否则其中没有代码。那样,那些跟随你的脚步的人将不必提出这个问题 “其他的含义是什么?是否应该有一个?”

如果你发现自己无法提出正确的措辞来解释为什么其他方面并不重要,那么它很有可能存在。

缺少精灵通常是代码味道。