2010-07-02 21 views
2

我不確定我瞭解if塊和switch/select塊之間的區別。 我的意思是我一直都在使用它們。但是我不清楚什麼時候應該使用開關塊,什麼時候不使用。因爲,選擇塊可以擴展爲塊。 所以我認爲使用select塊的唯一真正優勢是人類的可讀性。編程101,選擇VS如果塊

回答

4

答案會因語言而異。例如,在C和C++中,編譯器可以將switch(select)語句變成相當高效的跳轉表,部分原因是它們比語句條件更具限制性。 (雖然公平,但現代編譯器在優化各種各樣的東西方面相當不錯)。這可能不適用於所有語言/編譯器(我似乎記得VB6基本上將Select Case視爲一系列If/ElseIf語句。)

可讀性絕對是一個因素:在VB中使用switch(或Select Case)告訴任何跟隨你的人以下的所有分支在共同條件下分支,這非常有用。

可維護性(與可讀性有關,但不同於可讀性)也是一個因素。如果你改變了switch上分支的一件事,你就完成了;如果您有很長的一系列if報表,則很容易錯過一個(或多個)報表。

+0

9秒...我必須是一個慢打字員或什麼..;) – falstro 2010-07-02 07:10:23

+1

@roe:大聲笑!是的,媽媽在高中給了我很好的建議(「打字」)...... – 2010-07-02 07:12:39

0

根據我認爲的語言,但我們假設您正在談論C.在C中,切換塊將轉換爲跳轉表,因此您將根據該值直接跳轉到您的部分想要執行,而if塊可以進行任意比較,並且必須將其與每個可能的值進行比較以找到要執行的分支。

請注意,交換機只能使用設置值(跳轉表在編譯時創建),而if塊可以執行小於/大於比較或與變量進行比較。

0

如果你想比較多個項目,你會想要使用一個if塊。你可以使用if/elseif/else。如果你想對一個變量的值做出反應,你可以使用開關/選擇塊。

if (today is monday) { 
    it is moday. 
} else if (today is tuesday and it is 8:00pm) { 
    it was not monday but it is tuesday and it is 8:00pm. 
} else { 
    it must be sunday. 
} 

switch (day) { 
    case: Monday 
      it is monday 

    case: Tuesday 
      it is tuesday 
} 
2

開關組相當多的要求如下:

  • 你只有一個標準進行調查,或若干準則是不依賴對方
  • 你有幾個(即超過2或3)預定義的分支
  • 你要搜索的平等,比如
  • 「天== Days.Monday」

如果你想同時檢查多個依賴標準,如果你只有一個分支(或者兩個小分支),或者你想搜索不等式(例如「time> 8.00」),if聲明是要走的路。

可以說,我的列表中的第一點可以用各種「漂亮」的技術繞開,但以我的經驗來說,這只不過是相當複雜且難以閱讀的代碼 - 和T.J.聲明,可讀性是編寫可維護代碼時的一個因素。

2

所以我認爲使用select塊的唯一真正好處是人的可讀性。

不要低估這一點。 在編程時,人的可讀性應該是缺省的第一關注點