在空的else语句中嵌套会产生额外开销吗?

3

示例1:

if(some statement)
   .... //irrelevant code
else
   if(other statement)
      .....
   else
      .....

示例2:

if(some statement)
   .... //irrelevant code
else if(other statement)
   ....
else
   ....

在我的情况下,我更喜欢使用示例1来展示嵌套的if语句之间的关系。
示例1比示例2效率低吗?

2
除非您已经测量了影响应用程序的性能差异,否则通常应假定您没有性能问题。在这种情况下,使用空格或格式对性能没有影响。即使存在一些小差异,也不太可能改变您选择哪个更清晰易读的选项。 - Peter Lawrey
我会时刻记住,第一个if(某些语句)应该包含最可能为真的条件,因为其他检查将不会被调用。这里的其他答案提到了可读性问题。 - Ben
1
它们完全相同,只是你把 if 放在下一行。此外,else if 和嵌套的 if else 是相同的,因为它只执行下一个语句,这恰好是 if 语句。通过比较每个字节码,您可以自己看到这一点。 - Josh M
以上两个示例是相同的,除了格式不同之外。它们将完全相同地运行。(当然,加入一些 {} 字符,你可以使它们变得非常不同。) - Hot Licks
我永远不会编写第一个示例而不使用 {} -- 你不应该在没有 {} 的情况下嵌套,因为这会引入视觉线索和可能引发微妙错误。 - Hot Licks
确实是微妙的错误。那种解析歧义将是一个噩梦般的发现。 - David Ehrmann
1个回答

3
这两个代码与这个相同:
if(some statement) .... else if(other statement) else

性能与此无关,这是完全相同的代码(将生成相同的字节码),而可读性与此有关,我更喜欢第一个。

我建议您即使在ifelse块内的单行语句也加上花括号:

if(something) {
   doSomething();
} else if(something2()) {
   doSomething2();
} else {
   doSomething3();
}

1
+1,不过我更喜欢第二种方式。我倾向于只在必要时使用嵌套,否则你可能会认为嵌套在某些情况下很重要,而实际上并非如此。同样,我不使用多余的 { },而是使用我的 IDE 中的代码格式化工具 ;) - Peter Lawrey
@PeterLawrey 有时我也不这样做,但我总是建议人们加上 { },因为这可能有助于初学者避免未来的“缩进错误” :) - Maroun
@PeterLawrey - 我强烈反对省略 {}。这样做很容易引入错误,尤其是在编辑代码时。在我看来,任何编码风格问题的主要标准都是最小化错误。 - Hot Licks
@HotLicks 我认为你应该使用你可用的工具,如果你正确地使用你的IDE和它的格式化功能,那么 { } 只是多余的。如果你不使用标准格式化,你会引入更多的问题,而你通过使用 { } 能够节省的时间并不值得。 - Peter Lawrey
我大多数编程时使用IDE,但即使是我(没错,就是我)也曾经犯过在if/else语句中没有加上{}的错误。这种错误我已经犯了两三次,至少有一次花费了超过一分钟才找出问题所在。有时它会产生语法错误,有时编译器会愉快地编译错误的代码。 - Hot Licks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接