2

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

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

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

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

或者

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

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

也请提供相关的理由。

干杯!

4

6 回答 6

2

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

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

但是在第二个中,您检查a 两次if bis false(一次 if bis true)。如果b为假,将进行 4 次检查。但编译器可能会将两者优化为相同。

于 2013-05-06T10:35:11.147 回答
1

由于问题更改而过时

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

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

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

于 2013-05-06T10:07:34.507 回答
1

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

于 2013-05-06T10:15:06.193 回答
0

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

于 2013-05-06T10:08:59.850 回答
0

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

于 2013-05-06T10:14:05.737 回答
0

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

于 2013-05-06T13:10:12.700 回答