我不確定我瞭解if塊和switch/select塊之間的區別。 我的意思是我一直都在使用它們。但是我不清楚什麼時候應該使用開關塊,什麼時候不使用。因爲,選擇塊可以擴展爲塊。 所以我認爲使用select塊的唯一真正優勢是人類的可讀性。編程101,選擇VS如果塊
回答
答案會因語言而異。例如,在C和C++中,編譯器可以將switch
(select)語句變成相當高效的跳轉表,部分原因是它們比語句條件更具限制性。 (雖然公平,但現代編譯器在優化各種各樣的東西方面相當不錯)。這可能不適用於所有語言/編譯器(我似乎記得VB6基本上將Select Case
視爲一系列If/ElseIf
語句。)
可讀性絕對是一個因素:在VB中使用switch
(或Select Case
)告訴任何跟隨你的人以下的所有分支在共同條件下分支,這非常有用。
可維護性(與可讀性有關,但不同於可讀性)也是一個因素。如果你改變了switch
上分支的一件事,你就完成了;如果您有很長的一系列if
報表,則很容易錯過一個(或多個)報表。
根據我認爲的語言,但我們假設您正在談論C.在C中,切換塊將轉換爲跳轉表,因此您將根據該值直接跳轉到您的部分想要執行,而if塊可以進行任意比較,並且必須將其與每個可能的值進行比較以找到要執行的分支。
請注意,交換機只能使用設置值(跳轉表在編譯時創建),而if塊可以執行小於/大於比較或與變量進行比較。
如果你想比較多個項目,你會想要使用一個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或3)預定義的分支 你要搜索的平等,比如
- 「天== Days.Monday」
如果你想同時檢查多個依賴標準,如果你只有一個分支(或者兩個小分支),或者你想搜索不等式(例如「time> 8.00」),if聲明是要走的路。
可以說,我的列表中的第一點可以用各種「漂亮」的技術繞開,但以我的經驗來說,這只不過是相當複雜且難以閱讀的代碼 - 和T.J.聲明,可讀性是編寫可維護代碼時的一個因素。
所以我認爲使用select塊的唯一真正好處是人的可讀性。
不要低估這一點。 在編程時,人的可讀性應該是缺省的第一關注點。
- 1. 在vs代碼中選擇代碼塊
- 2. 如果選擇添加代碼塊
- 3. 如果塊vs切換大小塊
- 4. 管理Python模塊101
- 5. 網頁編程:Apache模塊:mod_python vs mod_php
- 6. 編程選擇選擇下拉
- 7. 編程創建表單 - 選擇選擇
- 8. 選擇一個表格視圖細胞編程:selectRowAtIndexPath VS的setSelected
- 9. 以編程方式選擇一個UITableViewCell,如果它包含cgrect
- 10. 選擇CMS:EPiServer vs Orchard vs SiteCore vs Umbraco
- 11. 如果選擇(ORACLE)
- 12. 如果選擇JTable
- 13. 如果jQuery選擇
- 14. D3全選VS jQuery選擇
- 15. DataTable的選擇VS LINQ選擇
- 16. JQuery類選擇器vs id選擇器
- 17. angular.element選擇器vs jquery選擇器
- 18. jQuery選擇器:多重選擇vs select
- 19. 選擇* vs選擇所有列名稱
- 20. 如果已經選擇該選擇框
- 21. 選擇的tableview行編程
- 22. 選擇套接字編程
- 23. 酒選擇動態編程
- 24. Magicsuggest改變選擇編程
- 25. 選擇ComboBox項編程C#
- 26. 更新MD-選擇編程
- 27. 組選擇編程問題
- 28. 編程語言選擇
- 29. 選擇下拉值編程
- 30. 如何取消選擇ol.layer.Vector編程
9秒...我必須是一個慢打字員或什麼..;) – falstro 2010-07-02 07:10:23
@roe:大聲笑!是的,媽媽在高中給了我很好的建議(「打字」)...... – 2010-07-02 07:12:39