2009-12-22 77 views
13

在處理多個條件時使用if-else和case語句之間是否存在任何性能差異?如果vs Case語句

哪個是首選?

+12

這是非常依賴於語言的switch/case語句在不同語言中的工作方式不同 - 例如,在某些語言中,您可以切換一個字符串,而在另一些語言中則不能。 – 2009-12-22 14:31:00

回答

25

在給定的上下文中使用最具可讀性的一種。

+0

感謝你們大家的回答對於使用if和case語句非常有用 – fealin 2009-12-23 08:57:36

+0

雖然我會同意 - 這並沒有真正回答這個問題。問題是關於性能優勢。 – 2014-01-15 13:22:24

+1

這個問題在這個答案之後被重寫,重點轉移了很多。 – 2014-01-15 16:11:48

27

在某些語言中,如C,switch可能會更快,因爲它通常使用jump table實現。儘管如此,現代編譯器有時足夠聰明,可以使用幾個if

無論如何,它可能無所謂,微型優化(幾乎)是沒有用的。

5

當您可以使用switch/case語句時,某些編程語言會受到限制。例如,在很多C語言中,case值必須是編譯時已知的常量整數。

性能特點可能兩種技術不同,但你不可能提前預測它們是什麼。如果性能對您的應用程序中的此代碼非常重要,請確保您在決定之前確認配置文件兩種方法,因爲答案可能會讓您感到意外。

通常情況下,性能差異可以忽略不計,因此,你應該選擇最易讀,易懂,易維護代碼,你應該在幾乎任何其他節目的情況。

7

當你有多個ifelse時,我推薦switch/select。然後再次,它不總是工作。

假設你類似的東西(不推薦,但例如只)

If a > 0 and b > 0 then 

' blabla 
ElseIf b = -5 then 

' blabla2 
ElseIf a = -3 and b = 6 then 

End If 

使用開關/選擇是不是要走的路。然而,查詢特定的變量值這樣

select case a 

     case 1: 
      ' blabla 
     case 2: 
      ' blabla2 
     case 3: 
      ' blabla3 
     case 4: 
      ' blabla4 
     case else: 
end select 

在這種情況下,我強烈推薦它,因爲它是爲其他人更具可讀性。

0

我會在這裏添加一些答案。這不是一個性能問題,如果你真的關心性能......寫一個測試,看看哪個更快。

但是,這應該是一個關於哪一個適合使用的問題,而不是哪個更好。如果你有多個if/else語句,那麼請自己幫忙併使用case語句。如果它是一個簡單的if/else,則使用if/else。你稍後會感謝你。

3

caseswitch語句實際上只是「if .. elseif ...」結構的特殊情況,您可以在同一個對象與每個分支中的不同簡單值進行比較時使用這種結構,這就是所有正在完成。使用它們的好處是大多數編譯器都可以將它們實現爲跳轉表,因此有效地將整個200(或多個)分支檢查實現爲單個表索引操作和跳轉。

出於這個原因,你想使用一個case語句時,你

  1. 可以
  2. 有相當大數量的分支。

「elseif」的數量越大,說明就越有吸引力。

3

爲了便於閱讀,通常優選案例陳述,如果存在任何速度差異,則通常會更快,但這不適用於所有可能的環境。

您可能會編寫一個測試,顯示哪個測試對您的環境更快,但要注意緩存和編譯器優化。