我不确定我理解if块和switch / select块之间的区别。 我的意思是我一直都在使用它们。但是当我应该应用开关块时和不需要时,我不清楚。因为,可以将选择块扩展为if块。 因此,我可以想到使用选择块的唯一真正优势是人类可读性。
答案 0 :(得分:4)
根据语言的不同,答案会有所不同。例如,在C和C ++中,编译器可以将switch
(select)语句转换为相当高效的跳转表,部分原因是它们比if
语句条件更具限制性。 (虽然公平地说现代编译器非常适合优化各种各样的东西。)这可能不适用于所有语言/编译器(我似乎记得VB6基本上将Select Case
视为一系列If/ElseIf
}语句。)
可读性绝对是一个因素:使用switch
(或VB中的Select Case
)告诉任何跟随你的人,下面的所有分支都在一个共同条件上分支,这非常有用。
可维护性(与可读性相关但不同)也是一个因素。如果你在switch
中改变了一个被分支的东西,你就完成了;如果您有一长串if
语句,很容易错过一个(或更多)语句。
答案 1 :(得分:2)
交换机块非常需要以下内容:
如果您想同时检查多个相关标准,如果您只有一个分支(或者可能是两个小分支),或者您想要搜索不等式(例如“time> 8.00”) ,if语句是要走的路。
可以说,我的列表中的第一点可以使用各种“漂亮”技术来规避,但根据我的经验,这只是令人费解和难以阅读的代码 - 以及T.J.陈述,可读性是编写可维护代码的一个因素。
答案 2 :(得分:2)
因此,我可以想到使用选择块的唯一真正优势是人类可读性。
不要低估这一点。 在编程中,人类可读性应该是默认的第一关注 。
答案 3 :(得分:0)
取决于我想的语言,但我们假设您正在谈论C.在C中,switch-block将转换为跳转表,因此您将根据值直接跳转到您想要的部分执行,而if块可以进行任意比较,并且必须将它与每个可能的值进行比较才能找到要执行的分支。
请注意,交换机只能使用设置值(跳转表在编译时创建),而if块可以执行小于/大于比较或比较变量。
答案 4 :(得分: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
}