2010-05-21 161 views
4

是否真的有使用正在使用If,ElseIf,ElseIf是否比使用If,If,If?

If(this) 
{ 
} 
Else If(that) 
{ 
} 
Else 
{ 
} 

或使用任何区别,

If(this) 
{ 
} 
If(that) 
{ 
} 
Else 
{ 
} 

? 一个人执行得更快吗?编译器或体系结构是否有所作为?

+2

这是基本的编程问题,你在c书中找到答案4章 – 2010-05-21 11:34:23

+1

你有没有试过运行你的代码? – Johnsyweb 2010-05-21 11:38:24

+3

“执行得更快”是您在决定使用哪种结构时应该担心的* LAST *事情。第一个考虑是正确的 - 他们做不同的事情,因为下面解释了许多优秀的答案,所以选择能够给出正确答案的答案。 #2是清晰度:当有两个有效的选项时,选择哪一个更容易阅读和理解。 – 2010-05-21 11:51:52

回答

19

有该this - 阻塞的内容和that - 块可以在第二形式执行的巨大差异,而第一种形式允许那些将要执行的最多一个。

比较这两个Python代码片段:

x = 10 

if x > 5: 
    print "x larger than 5" 
elif x > 1: 
    print "x larger than 1" 
else: 
    print "x not larger than 1" 

# output: x larger than 5 

x = 10 

if x > 5: 
    print "x larger than 5" 
if x > 1: # not using else-if anymore! 
    print "x larger than 1" 
else: 
    print "x not larger than 1" 

# output line 1: x larger than 5 
# output line 2: x larger than 1 

正如其他人所说,你一般不应该关注这些变化之间的性能这么多,你应该关心正确性。但是,由于您询问...其他所有条件均相同,因此第二个表格将会变慢,因为第二个条件必须为进行评估。

但是,除非您确定以这种形式编写的代码是瓶颈,否则即使认为关于优化它也不值得。在从第一种形式转换到第二种形式时,你放弃了跳出第一个if语句并取回第二个条件的强制评估。根据语言,这是可能一个极其微不足道的差异。

+0

对,两者在观察上相当,只是'this'和'that'是互斥的。 请注意,由于编译器可以为两者生成代码,因此可能会对性能产生影响。对于像[lisaac](http://en.wikipedia.org/wiki/Lisaac)这样的语言,如果可能的话使用调度表编译if语句,使用else if可以提高性能。 – tonio 2010-05-21 11:30:36

4

是的,在你的第一个例子中,如果它的计算结果为true并且计算结果为true,那么只有第一个代码块将被执行,而在第二个例子中,它们都会执行。

它们不等价

3

是的。

在第一种情况下:如果当前条件失败,控制流将只检查下一个条件,但在第二种情况下,它将检查遇到的所有条件。

在第一种情况下,只有前面所有条件都不成立时才会执行其他部分。而在第二种情况下,只有在最后的If条件失败的情况下。

+0

在第二种情况下,如果第一个if为true且第二个为false,则可以评估Else语句。 – 2010-05-21 11:38:38

+0

更新了答案。 – 2010-05-21 11:40:29

1

它是有区别的。

万一“this”和“that”都为真,代码的两部分都会导致其他情况。

0

在第一个代码。 它会检查IF,如果为真,如果为假,则就会 检查,然后执行它的身体, ELSEIF如果是,如果为假,则就会 执行的机构,执行它的身体, 真其他。

二码 它会检查IF,如果是真,那么执行它的身体,如果 假无能为力。 检查第二个如果如果是真的执行它的身体, 如果为false然后将 执行其他体。