繁体   English   中英

何时可以让switch语句使用多个case语句的人能举一个例子吗?

[英]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应该同时具有action2action3

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM