有人可以向我解释一下吗?
7 回答
它们非常相似,但每个都有一些特殊功能。
转变
switch
通常比许多嵌套更紧凑if else
,因此更具可读性- 如果你省略了
break
两个 switch case 之间的情况,你可以在许多类似 C 的语言中陷入下一个 case。if else
你需要一个(这对goto
你的读者来说不是很好......如果语言完全支持goto
的话)。 - 在大多数语言中,
switch
只接受原始类型作为键和常量作为案例。这意味着编译器可以使用非常快的跳转表对其进行优化。 目前还不清楚如何
switch
正确格式化。从语义上讲,这些案例是goto
应该向左对齐的跳转目标(如 的标签)。当你有花括号时,情况会变得更糟:case XXX: { } break;
或者大括号应该进入自己的行?右大括号应该放在后面
break
吗?那会有多难读?等等- 在许多语言中,
switch
只接受某些数据类型。
如果别的
if
允许条件中的复杂表达式,而 switch 需要一个常量- 您不会不小心忘记
break
betweenif
s 但您可以忘记 theelse
(尤其是在 cut'n'paste 期间) - 它接受所有数据类型。
主要区别在于立即switch
发送给相关人员,通常通过索引跳转,而不是必须评估链中所需的所有条件,这意味着到达链末端的代码比到达链末端的代码更慢开始。case
if-else
这反过来又对链没有的switch
语句施加了一些限制:它不能处理所有数据类型,并且所有值都必须是常量。if-else
case
IF else - IT 用于做出决定
Switch 语句 - 用于根据案例值列表测试给定变量的值。
if-else 和 switch 的区别
if 语句内的表达式决定是执行 if 块内的语句还是 else 块下的语句。另一方面,switch 语句中的表达式决定执行哪种情况。
if-esle 语句检查是否相等以及逻辑表达式。另一方面, switch 只检查是否相等。
if 语句计算整数、字符、指针或浮点类型或布尔类型。另一方面,switch 语句只计算字符或整数数据类型。
执行顺序就像 if 块下的语句将执行或 else 块语句下的语句将执行。另一方面,switch 语句中的表达式决定执行哪个 case,如果您不在每个 case 之后应用 break 语句,它将执行到 switch 语句结束。
如果 if 中的表达式结果为 false,则将执行 else 块中的语句。如果 switch 语句中的表达式结果为假,则执行默认语句。
很难编辑 if-else 语句,因为跟踪需要更正的位置很繁琐。另一方面,很容易编辑 switch 语句,因为它们很容易跟踪。
总之,我们可以说 switch 的行为比 if else 语句快一点!!!
Switch 和 if-else 语句的区别如下:
这是 if-else 阶梯的一般语法:
if (condition1) { //Body of if }
else if (condition2) { //Body of if }
else if (condition3) { //Body of if }
else { //default if all conditions return false }
这是 switch 的一般语法:
switch ( variable )
{
case <variable value1>: //Do Something
break;
case <variable value2>://Do Something
break;
default: //Do Something
break;
}
if-else 阶梯属于严格条件检查类型,而 switch 属于跳转值捕获类型。
切换 if-else 阶梯的优点:
- switch 语句的运行速度比等效的 if-else 阶梯要快得多。这是因为编译器在编译过程中为一个开关生成了一个跳转表。因此,在执行过程中,它不会检查满足哪种情况,而只是决定必须执行哪种情况。
- 与 if-else 语句相比,它更具可读性。
明显的区别:
- 该
if...else
语句检查括号中的条件true
是否计算为或false
- 该语句检查括号中的值与关键字的值
switch
是否相等。case
true
例子
var a = 'hello'
示例 - 如果...否则
if(a == 'hello') {
print('right!')
} else if (a == 'hi')
print('left!')
} else {
print('wrong!')
}
示例 - 开关
switch(a) {
case 'hello': // a == 'hello'
print('right!')
break // You should add this
case 'hi': // a == 'hi'
print('left!')
break
default: // this executes if no equality was met in the values above.
print('wrong!')
}
// If you are not sure of either of the parenthesis value or the
// case value or you want to make more complex conditioning, you can use `true`:
var age = 18:
switch(true) {
case age < "18": // 18 < 18 == false
print("under age!");
break;
case age == 18: // 18 == 18 == true
print("right age!");
break;
default:
print("18+!");
}
我认为主要区别在于,在 if-else 块中我们可以测试条件。但在 switch 中并不完全相同