[英]Can someone give an example when to let switch statements use multiple case statements?
我正在阅读Javascript:The Definitive Reference ,它在第93页上说:
在极少数情况下,编写这样的从一个case标签到另一个case标签的代码很有用,但是在99%的时间中,您应该非常小心地用break语句结束每个case。
在什么情况下,您会让switch语句变成多个case语句?
一种有用的情况是,几个值应具有相同的结果:
switch (value) {
case 1:
case 2:
action1();
break;
case 3:
case 4:
case 5:
action2();
break;
}
空箱将落到下一个。 在这种情况下,混淆的风险很小。
本书作者担心的情况是当您组合动作时,例如,值2
应该同时具有action2
和action3
:
switch (value) {
case 1:
action1();
break;
case 2:
action2();
// continue with action3
case 3:
action3();
break;
}
忘记break
是一个常见的错误,您应该像上面一样添加评论,以明确表明它是有意遗漏的。
为了比较; 在C#中,不允许您仅在switch
省略一个break
,而您必须使用goto
来指定执行继续的情况。
我做过的唯一一次是大写时首选用户输入,小写时可接受:
switch(input){
case 'a':
print "Please use uppercase next time";
case 'A':
//do stuff here
break;
}
当您有多个案例都应该获得相同的代码时,这当然是可以接受的:
switch(val) {
case "aa":
case "bb":
// do you thing here
break;
}
我认为这本书应该坚持事实,而不是发布这种建议。 请记住,如果前一个case
没有break
语句,则下一个case
将被执行。 这很有用,但也可能造成混淆(即缺少break
语句将导致错误)。 何时使用它是主观的,但是基本上您可以在条件类似于or
表达式时使用它:
if(myvar == x || myvar == y) {
// do A
} else if (myvar == w || myvar == z) {
// do B
} else {
// do C
}
可以改写为:
switch(myvar) {
case x:
case y:
// do A
break;
case w:
case z:
// do B
break;
default:
// do C
break;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.