Coding style 应该';其他';如果发生以下情况,则将其保留或丢弃';不需要什么?

Coding style 应该';其他';如果发生以下情况,则将其保留或丢弃';不需要什么?,coding-style,if-statement,Coding Style,If Statement,这是一个无关紧要的问题,但我一直在想 就风格而言(我假设性能是相同的),在if语句中保留一个不必要的“else”是否更好 例如,以下哪项更好: if (x < 10) doSomething(); else if (x > 20) doSomethingElse(); if(x20),则为else doSomethingElse(); 或 if(x20) doSomethingElse(); 另一种情况: if (x < 10) return; else do

这是一个无关紧要的问题,但我一直在想

就风格而言(我假设性能是相同的),在if语句中保留一个不必要的“else”是否更好

例如,以下哪项更好:

if (x < 10)
  doSomething();
 else if (x > 20)
  doSomethingElse();
if(x<10)
doSomething();
如果(x>20),则为else
doSomethingElse();

if(x<10)
doSomething();
如果(x>20)
doSomethingElse();
另一种情况:

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

if(x<10)
返回;
doSomething();
谢谢


Luke

在第一个示例中,一定要将
else
保留在中-如果第一部分为真,它会阻止额外的计算

(即,如果您:

    if (x < 10) 
     doSomething(); 
   if (x > 20) 
    doSomethingElse();
if (x < 10)
  doSomething();
else if (x > 20)
  doSomethingElse();
if(x<10)
doSomething();
如果(x>20)
doSomethingElse();
始终对两个ifs进行评估

但是,如果您这样做:

    if (x < 10) 
     doSomething(); 
   if (x > 20) 
    doSomethingElse();
if (x < 10)
  doSomething();
else if (x > 20)
  doSomethingElse();
if(x<10)
doSomething();
如果(x>20),则为else
doSomethingElse();
第二部分仅在第一部分为false时进行评估。[如果x<10,您甚至不想检查x>20,这是评估的浪费…)


第二是个人设计决策;选择对您更具吸引力、更符合特定逻辑或符合公司标准(如果有)的标准。

将ELSE放在提高代码清晰度的地方。在第一个示例中,保留else,因为它有细微的不同,保存一个评估。第二种情况不那么明确;通常情况下,我在返回后使用else作为备用案例,但在返回用于错误处理时,请忽略else。

作为一般规则,始终将它们保留在中,并添加注释说明为什么else中没有代码是正确的。这样,那些跟随你的人就不必问这个问题了 “其他的含义是什么?是否应该有一个?”

如果你发现自己无法用正确的措辞来解释为什么else不重要,那么很有可能它是重要的


缺少其他人通常是一种代码气味。

通常我会远离任何不必要的东西。更多的代码意味着更多的bug空间

然而,如果程序流程中不需要的代码让阅读它的人看得更清楚,那么它毕竟是必要的

在您的第一个示例中,没有一个数字会小于10且大于20,但有时逻辑并不明显。else使我们很容易看到这些条件是同一代码块的一部分,因此应该包括在内

第二个例子中的其他部分实际上并没有改变程序的流程,所以它实际上是不必要的。事实上,你可能会考虑重新设计逻辑:

if(x>10){
    doSomething;
}
现在您甚至不必担心return语句或额外的else块


编辑:添加括号。。看在图灵的份上

如果要在多行中打断
If
语句,那么为了图灵的缘故,请使用括号!因此:

if (x < 10) return;
if(x<10)返回;

if(x<10){
返回;
}
但不是

if (x < 10)
    return;
if(x<10)
返回;
else
问题是主观的,但我的观点是,
if
/
else
在概念上将您的代码分成了或多或少相等的情况。您的第一个示例处理两个概念上相似但相互排斥的情况,因此我认为
else
是合适的。对于两个独立的
if
语句,乍一看似乎这两个条件是独立的,而它们不是

当您在
if
上返回
时,情况会有所不同。这些情况自动相互排斥,因为
返回将阻止其他代码运行。如果替代案例(没有返回)很短,特别是如果它也返回,那么我倾向于使用
else
。如果替代代码很长或很复杂,那么我不使用
else
,将
If
视为更多的保护子句


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

在一些平台上,代码有时会执行得更快,而省略了“else”语句。例如:

if (a & 1) b |= 2; if (!(a & 1) b &= ~2; 如果(a&1) b |=2; 如果(!(a&1) b&=~2; 将为微芯片PIC生成四条指令,并以恒定的四个周期执行。另一种选择:

if (a & 1) b |= 2; else b &= ~2; 如果(a&1) b |=2; 其他的 b&=~2; 将需要五条指令,执行时间将是四个或五个周期,具体取决于(a&1)是否为真


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

…所以请给出一个注释,说明为什么不需要它,而不是空的else!同意,但我建议在第二种情况下删除
else
,因为它没有效果。还有一个事实是,如果你包含它,那么re意味着它是必要的。它当然不会让每个人都感到困惑,但它可能会让某些人感到困惑。我认为它不仅仅是“个人的”设计决策。在本例中,
x>20
可能不是很昂贵,但有时,
if
表达式可能很昂贵。在这种情况下,当您可能只需要计算第一个表达式时,为什么还要浪费时间计算两个这样的表达式?这就是为什么
|
&
是“短路”的原因操作员:一旦知道全部结果,他们就会停止并返回。@Daniel Earwicker-我只是说这是第二个示例的个人设计决定(返回),其中没有额外的评估,两种方法的流程相同。同意。应始终包括括号。 if (a & 1) b |= 2; else b &= ~2;