为什么 switch 语句没有花括号?
Why don't switch statements have curly braces?
switch 语句的典型语法是:
switch(expression) {
case one:
// do something...
break;
case two:
// do something else...
break;
case three:
case four:
// do something special
break;
default:
// if nothing matches...
break;
}
这种语法看起来很像 Python(尤其是冒号和人们缩进的方式),与 JavaScript、Java 等语言的一般语法相反或 C,其中大括号用于大多数语句。有什么具体原因吗?
我希望它看起来更像:
switch(expression) {
case (one) {
// do something...
break;
} case (two) {
// do something else...
break;
} case (three) case (four) {
// do something special
break;
} default {
// if nothing matches...
break;
}
}
我觉得我刚刚提供的例子看起来像一个 if-else if-else 语句,但是 switch 语句不应该符合语法风格吗?
在类 C 编程语言中,带有冒号的标识符用作跳转的标签。
label:
// ...
goto label;
JavaScript 没有 goto
语句但仍有标签。
label1: {
label2: {
console.log('break nested block');
break label1;
console.log('unreachable');
}
console.log('unreachable');
}
在switch
语句中,每个case
都有一个标签。 switch
语句有自己的列表,用于那些名为 jump table 的标签。当给定值匹配时,跳转到该标签并执行每个代码如下goto
。
case
语句在 C 中实际上被视为标签,类似于 goto
使用的标签。为什么它被设计成这样很难回答,并且需要挖掘丹尼斯·里奇 (Dennis Ritchie) 的各种旧出版物。
更重要的是,对于现在,您可以使用带大括号的switch
,这甚至被认为是一种很好的做法。这是有效的 C(和 C++):
switch(expression)
{
case one:
{
// do something...
break;
}
case two:
{
// do something else...
break;
}
case three:
case four:
{
// do something special
break;
}
default:
{
// if nothing matches...
break;
}
}
现在您甚至可以在每个案例中声明局部变量。
switch 语句的典型语法是:
switch(expression) {
case one:
// do something...
break;
case two:
// do something else...
break;
case three:
case four:
// do something special
break;
default:
// if nothing matches...
break;
}
这种语法看起来很像 Python(尤其是冒号和人们缩进的方式),与 JavaScript、Java 等语言的一般语法相反或 C,其中大括号用于大多数语句。有什么具体原因吗?
我希望它看起来更像:
switch(expression) {
case (one) {
// do something...
break;
} case (two) {
// do something else...
break;
} case (three) case (four) {
// do something special
break;
} default {
// if nothing matches...
break;
}
}
我觉得我刚刚提供的例子看起来像一个 if-else if-else 语句,但是 switch 语句不应该符合语法风格吗?
在类 C 编程语言中,带有冒号的标识符用作跳转的标签。
label:
// ...
goto label;
JavaScript 没有 goto
语句但仍有标签。
label1: {
label2: {
console.log('break nested block');
break label1;
console.log('unreachable');
}
console.log('unreachable');
}
在switch
语句中,每个case
都有一个标签。 switch
语句有自己的列表,用于那些名为 jump table 的标签。当给定值匹配时,跳转到该标签并执行每个代码如下goto
。
case
语句在 C 中实际上被视为标签,类似于 goto
使用的标签。为什么它被设计成这样很难回答,并且需要挖掘丹尼斯·里奇 (Dennis Ritchie) 的各种旧出版物。
更重要的是,对于现在,您可以使用带大括号的switch
,这甚至被认为是一种很好的做法。这是有效的 C(和 C++):
switch(expression)
{
case one:
{
// do something...
break;
}
case two:
{
// do something else...
break;
}
case three:
case four:
{
// do something special
break;
}
default:
{
// if nothing matches...
break;
}
}
现在您甚至可以在每个案例中声明局部变量。