我不确定我了解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