【问题标题】:Which is better of the two: if-elif-else or if-else两者哪个更好:if-elif-else 或 if-else
【发布时间】:2013-05-06 10:03:34
【问题描述】:

这不是一个家庭作业问题,这个问题只是我和朋友讨论的结果。

我搜索了很多,但找不到任何可靠的来源可以通过适当的推理来确定答案,所以我来到了程序员的圣地。

以下两种编码方式哪种更好:

if(a)
{
    if(b)
    ....
    else if(c)
    ....
}

if(a && b)
...
else if(a && c)
...

我搜索并发现http://en.wikipedia.org/wiki/Cyclomatic_complexity 很有用,但仍然无法做出最终选择。

请同时提供相关理由。

干杯!

【问题讨论】:

  • 按性能来看;使用它们中的任何一个,您几乎不会获得任何显着的性能改进。恕我直言,这只是一个可读性的事情,你应该关心。没有别的了。
  • 请将“&”替换为“&&”,或者您的意思是“&”?你也可以添加一个关于使用的编程语言的标签
  • @vlad_tepesch 稍微改变了问题,如果可以请再看一下。

标签: java coding-style if-statement


【解决方案1】:

我认为没有优化的第一种方法应该更快。

因为在第一种方法中,您检查a 一次,然后检查bc。如果 b 是 false 则有 3 次检查(比较)。

但是在第二次你检查a 两次如果bfalse(如果btrue 一次)。如果b 为假,将进行 4 次检查。但编译器可能会将两者优化为相同。

【讨论】:

  • 我认为(假设 a 是布尔值,而不是函数)这是一个完美的 micro 优化示例,很可能给出 no 显着提高任何非平凡程序的性能。更多的是关于coding-style
【解决方案2】:

在我的编码经验中,这取决于点的内容。如果只是一行或几行代码,我更喜欢第二行。但是,如果还有更多,我将使用第一个块。

【讨论】:

    【解决方案3】:

    由于问题更改而过时

    这可能不一样,因为 if(b) 块可能会改变 a。

    如果条件中的所有变量都是常量,那么编译器可能会输出相同的代码,以避免第二个变体的额外操作。

    额外的 & 也是我更喜欢第一个变体的原因。

    【讨论】:

    • 他改编了这个问题,我的答案现在已经过时了
    【解决方案4】:

    第一个可能比较少,因为它只比较 a 一次,但第二个总是比较 a 两次,b 和 c 一次

    【讨论】:

      【解决方案5】:

      显然 if (a) ... then if b... 您可以将其视为分布.. a*b + a*c = a*(b+c) 或树构建。是 - 不 - 不,是 - 不 - 是等等。当您可以轻松构建这三个时,您就知道您的逻辑是好的,否则您必须重新考虑您的逻辑。

      【讨论】:

        【解决方案6】:

        几乎它们不是时间顺序或任何想法的差异。 它们之间的区别完全与您的代码架构师和您的愿景有关。例如,如果 A 的条件是中继器,我建议第一种方式,否则我更喜欢像第二种方式这样的简单代码,因为这易于阅读和继续。以及其他开发更热心帮助你。

        【讨论】: