是否可以合并共享作业的cases
,并为未共享的作业重复case
,或者只是将每个作业分开?
用一个简单的例子说明.. case 0
和180
都包含w = 330
,因此它们已合并;分配给x
的值对于每个值都是不同的,因此重复这些值以执行x
分配。
switch(window.orientation) {
case 0:
case 180:
w = 330;
//break
case 0:
x = '-180px';
//break
case -90:
case 90:
w = 480;
x = '0';
break;
case 180:
x = '-80px';
break;
}
答案 0 :(得分:3)
当在switch
语句中对每个元素执行多个操作时,最好不要重复相同的case
两次。您可以通过总结同一case
下的所有代码片段来轻松实现此目的。
例如,如果您要在A
上执行操作case 0
,在B
和case 0
上执行操作case 1
,那么您应该执行以下操作:
switch(variable) {
case 0:
// operation A;
case 1:
// operation B;
break;
}
这将在A
上执行B
和case 0
操作,因为break
上没有case 0
。
现在我们假设你写了这样的东西:
switch(variable) {
case 1:
x = 1;
break;
case 1:
x = 2;
break;
}
上述代码最终会将值1
分配给变量x
。第二个case 1
,由于第一个x = 2
中的break
语句,因此永远无法达到case 1
。
因此,如果您必须在case 0
和case 1
上执行不同的操作,但它们共享一些操作,那么最好将重复某些代码行而不是编写case 1
的情况分开两次,因为这使您的代码更容易阅读并且速度更快。
因此,在您的代码中,实现您想要的最佳方法是:
switch(window.orientation) {
case 0:
x = '-180px';
w = 330;
break;
case 180:
x = '-80px';
w = 330;
break;
case -90:
case 90:
w = 480;
x = '0';
break;
}
答案 1 :(得分:1)
我会说不要结合 - 错误的机会太高......就像你做的那样。永远不会达到第二个case 180
,因为第一个break;
之后会有{{1}}。
如果一切都一样,我认为可以合并(比如-90,90)。
答案 2 :(得分:0)
如果您运行Coverity之类的静态分析工具,则会报告轻微错误 如果您组合多个开关案例,如下所示。
case -90:
// Intentionally fall through
case 90:
w = 480;
x = '0';
break;
最好重复一些代码行而不是产生一些不希望的错误。
case -90:
w = 480;
x = '0';
break;
case 90:
w = 480;
x = '0';
break;
答案 3 :(得分:-1)
它无法正常工作。一旦执行了中断指令,就不会执行开关块中的剩余代码。 你可以像这样解决它:
switch(window.orientation) {
case 0:
case 180:
w = 330;
case 0:
x = '-180px';
break;
case 180:
x = '-80px';
break;
case -90:
case 90:
w = 480;
x = '0';
break;
}