Language agnostic 编程101,选择VS if块
我不确定我是否理解if块和switch/select块之间的区别。 我是说我一直在用它们。但我不清楚何时应用开关块,何时不应用。因为,select块可以扩展为if块。Language agnostic 编程101,选择VS if块,language-agnostic,control-flow,Language Agnostic,Control Flow,我不确定我是否理解if块和switch/select块之间的区别。 我是说我一直在用它们。但我不清楚何时应用开关块,何时不应用。因为,select块可以扩展为if块。 因此,我所能想到的使用select块的唯一真正优势是可读性。答案会因语言而异。例如,在C和C++中, Twitter (select)语句可以由编译器变成相当有效的跳转表,部分原因是它们比 > 语句条件更具限制性。(虽然公平地说,现代编译器非常擅长优化各种东西。)这可能不是所有语言/编译器都是如此(我似乎记得VB6基本上被视为Se
因此,我所能想到的使用select块的唯一真正优势是可读性。答案会因语言而异。例如,在C和C++中,
Select Case
一系列If/ElseIf
语句。)
可读性绝对是一个因素:使用开关
(或VB中的选择大小写
)告诉任何跟随您的人,下面的所有分支都在一个公共条件下分支,这非常有用
可维护性(与可读性相关,但不同于可读性)也是一个因素。如果在
开关
中更改正在分支的一个对象,则完成操作;如果你有一长串的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个)预定义的分支
- 您希望搜索相等,例如“day==Days.Monday”
不要低估这一点在编程中,人类可读性应该是默认的首要关注点 9秒。。。我一定是个打字慢的什么的……)