代码之家  ›  专栏  ›  技术社区  ›  Luke

在不需要“else”的情况下,“else”应该保留还是丢弃?[关闭]

  •  2
  • Luke  · 技术社区  · 15 年前

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

    就风格而言(我假设性能相同),在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 回复  |  直到 14 年前
        1
  •  5
  •   froadie    15 年前

    在第一个例子中,一定要保持 else 如果第一部分是真的,它会阻止额外的评估。

    (即,如果您这样做:

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

    两个假设都是

    但是,如果您这样做:

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

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

        2
  •  5
  •   muhmuhten    15 年前

    将else放在提高代码清晰度的地方。在第一个例子中,保留else,因为它有细微的不同,保存一个评估。第二种情况不太明确;通常我在返回之后使用else来处理备用情况,但是在返回用于错误处理时,省略else。

        3
  •  1
  •   Thom Smith    15 年前

    如果你打破了一个 if 语句跨越多行,然后为了图灵的缘故使用括号!所以:

    if (x < 10) return;
    

    if (x < 10) {
        return;
    }
    

    但不是

    if (x < 10)
        return;
    

    这个 else 如果 其他的 在概念上把代码分解成或多或少相等的情况。您的第一个示例是处理两个概念相似但相互排斥的情况,因此我发现 其他的

    当你 return 如果 ,情况不同。案件是 自动 相互排斥,因为 将阻止其他代码运行。如果替代案例(没有返回)很短,特别是如果它也返回,那么我倾向于使用 其他的 . 如果像常见的那样,替代代码很长或很复杂,那么我不使用 ,治疗 如果 更像是一个保护条款。

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

        4
  •  1
  •   supercat    15 年前

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

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

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

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

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

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

        5
  •  1
  •   Skunkwaffle    15 年前

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

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

    在你的第二个例子中,它实际上并没有改变程序的流程,所以它真的是没有必要的。事实上,您可以考虑稍微修改一下逻辑:

    if(x>10){
        doSomething;
    }
    

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

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

        6
  •  0
  •   EvilTeach    15 年前

    作为一般规则,总是把它们放在里面,并添加一个注释,说明为什么else没有代码。这样那些跟你走的人就不用问问题了 “其他的意味着什么?那里到底有没有?”

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

    失踪的其他人通常是一个代码的气味。