我对如何格式化switch语句已经有一段时间了。我看到了三个可行的选项,虽然我经常使用第一个选项(因为它是我经常看到的形式),但我发现第二个和第三个更直观。
首先:
switch(x) {
case 1:
DoSomething();
break;
case 2:
DoSomething();
break;
}
第二
switch(x) {
case 1: DoSomething();
break;
case 2: DoSomething();
break;
}
第三:
switch(x) {
case 1: DoSomething(); break;
case 2: DoSomething(); break;
}
我理解很多代码风格是优先的,所以我将我的官方问题设置为:
使用第二个或第三个选项是否存在根本错误,只要它在整个代码中保持一致?
答案 0 :(得分:4)
根据Oracle Docs;
A switch statement should have the following form:
switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
重要的是,to be consistent
,当您遵循格式时。
希望这有帮助。
答案 1 :(得分:3)
使用第二个或第三个选项是否存在根本错误,只要它在整个代码中保持一致。
否 - 如果您的语言允许使用此格式,则没有任何“根本”错误。与所有代码格式一样,它纯粹是个人或团队偏好。
第一种格式有充分的理由,例如:
case
与语句开始之间的视觉中断。break;
以区分坠落案例等)话虽如此,三种选择中的任何一种都没有错。
答案 2 :(得分:2)
恕我直言,问题在于你并不总是每个案例只有一次陈述,而这才是真正的问题 - 你正在创造一种不一致。有时你下面有多个陈述,有时候不是。
当你浏览一个大的代码库时,第二种风格可能会让你认为交换机在没有做任何事情的情况下中断,而第三种风格可能会让你认为这是故意省略中断的情况之一。
当然,一旦你仔细查看代码并弄清楚和/或习惯于不一致(因此它在你的脑海里变成了一致性),这两者都会消失,但编码风格的重点/标准是你不必那样做的。
与“if(条件)声明”类似的处理; vs“if(condition){statement;}” - 后者更通用,因此需要更少的努力来阅读大型代码库,这就是大多数样式指南坚持的原因。
答案 3 :(得分:1)
只要您遵循您所在的代码库标准,就可以了。如果你想定义一个更好的做事方式,这一切都取决于你自己的喜好..有些更容易阅读,有些人更喜欢其他标准。如果是这种情况(为新项目定义新标准),您应该尝试使用最常见的格式。
尽管如此,当交换机中只有一行代码时,我经常会选择第三行代码。我发现可读性比标准的一致使用更重要(可能因为标准的一致使用有助于阅读)。
答案 4 :(得分:0)
几个重要的参考文献给出了带有缩进的case
语句的示例:
这与您的第一种和第二种样式相匹配,而与具有case
语句和switch
相同缩进的第三种样式相反。
缩进case
语句的一个参数是使用局部范围声明变量的地方,需要大括号。这是适应您的第一种风格的示例:
switch (x) {
case 1:
DoSomething(0);
break;
case 2:
{
int superNum = GetSuperNumber();
DoSomething(superNum);
break;
}
}
没有缩进,最终case
或default
语句的右括号具有相同的缩进,并“落入”父switch
的右括号,如下所示:
switch (x) {
case 1:
DoSomething(0);
break;
case 2:
{
int superNum = GetSuperNumber();
DoSomething(superNum);
break;
}
}
这掩盖了层次结构,我认为这更难阅读。除非出于一致性原因而被迫使用现有代码样式或强制您使用该样式,否则第一种样式是一个不错的选择(也是我的最爱)。