哪两个更好:if-elif-else或if-else

时间:2013-05-06 10:03:34

标签: java coding-style if-statement

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

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

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

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

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

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

请提供相关推理。

干杯!

6 个答案:

答案 0 :(得分:2)

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

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

但是,如果abfalseb,则为true},在第二次检查b 两次。如果{{1}}为假,将进行4次检查。但编译器可能会优化两者是相同的。

答案 1 :(得分:1)

因问题变更而过时

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

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

附加&也是我更喜欢第一种变体的原因。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

显然,如果(a)......那么如果b ......您可以将其视为分布...... a * b + a * c = a *(b + c)或树木构建。是 - 否 - 不,是 - 否 - 是等等。你知道你的逻辑很好,当你可以轻松地构建三个,否则你必须重新思考你的逻辑。

答案 5 :(得分:0)

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