这不是一个家庭作业问题,这个问题是与我的朋友再次讨论的结果。
我搜索了很多,但找不到任何可靠的来源,通过适当的推理确定答案,所以我在这里是程序员的圣地。
以下两种编码方式中的哪一种更好:
if(a)
{
if(b)
....
else if(c)
....
}
或
if(a && b)
...
else if(a && c)
...
我搜索并发现http://en.wikipedia.org/wiki/Cyclomatic_complexity有用,但仍无法做出最终选择。
请提供相关推理。
干杯!
答案 0 :(得分:2)
我认为没有优化第一种方法应该更快。
在第一种方法中,您检查a
一次,然后检查其b
或c
。如果b是false
,则有3次检查(比较)。
但是,如果a
为b
(false
为b
,则为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的条件是转发器,我建议第一种方式,否则我更喜欢简单的代码,如第二种方式,因为这很容易阅读和继续。和其他发展更热心帮助你。