2010-05-21 168 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然後將 執行其他體。