Coding style 开关语句格式
我对如何设置switch语句的格式有一段时间的争论。我看到了三种可行的选择,虽然我经常使用第一种(这是我最常看到的形式),但我发现第二种和第三种更直观 第一:Coding style 开关语句格式,coding-style,switch-statement,Coding Style,Switch Statement,我对如何设置switch语句的格式有一段时间的争论。我看到了三种可行的选择,虽然我经常使用第一种(这是我最常看到的形式),但我发现第二种和第三种更直观 第一: switch(x) { case 1: DoSomething(); break; case 2: DoSomething(); break; } 第二: switch(x) { case 1: DoSomething(); brea
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;
}
我知道很多代码风格是优先考虑的,所以我将我的正式问题设置为:
只要第二个或第三个选项在整个代码中保持一致,那么使用第二个或第三个选项有什么根本性的错误吗?根据
这里重要的一点是,当您遵循一种格式时,要保持一致
希望这能有所帮助。我的意思是,问题在于,你并不总是每个案例只有一个陈述,这才是真正的问题——你在制造不一致。有时你会在下面有多个陈述,有时不会
当您浏览一个大的代码库时,第二种样式可能会让您认为开关会在不做任何事情的情况下断开,而第三种样式可能会让您认为这是故意忽略断开的情况之一
当然,一旦你更仔细地观察代码并找出它和/或习惯了不一致性(从而在你的头脑中它变成了一致性),这两个都会消失,但编码风格/标准的全部意义在于,你不必这样做
与“if(condition)statement;”vs“if(condition){statement;}”类似,后者更通用,因此在大型代码库上阅读需要更少的努力,这就是大多数样式指南坚持使用它的原因
使用第二个或第三个选项有什么根本性的错误,只要它在整个代码中是一致的
否-如果您的语言允许这种格式,那么它没有“根本”问题。与所有代码格式一样,这纯粹是个人或团队的偏好
第一种格式有很好的理由,例如:
案例
和语句start之间的可视中断
- 看到<代码>中断代码>在自己的行上,以区分失败案例等)
- 多个语句与单个语句的一致性
也就是说,这三个选项中的任何一个都没有问题。只要您遵循您正在使用的代码库的标准,就可以了。如果你想定义一种更好的做事方式,那完全取决于你自己的喜好。。有些人更容易阅读,有些人更喜欢其他标准。如果是这种情况(为新项目定义新标准),您应该尝试使用最常见的格式
尽管如此,当交换机中只有一行代码时,我通常会选择第三行。我发现可读性比一致使用标准更重要(可能是因为一致使用标准是为了帮助阅读)。就我个人而言,我在语言/文本编辑器/IDE中使用这一点,而这些语言/文本编辑器/IDE不会自动将其格式化为您提供的第一个选项
switch(x) {
case 1:
DoSomething();
break;
//Line separator here depends on how big the line-heights are with the IDE I'm working with
case 2:
DoSomething();
break;
}
正如大多数人所说,这纯粹是一种选择,但一致性是关键。一些重要的参考文献给出了缩进的case
语句示例:
这与您的第1和第2种样式相匹配,而第3种样式的缩进与switch
相同,具有case
语句
缩进case
语句的一个参数是使用局部范围声明变量,这需要大括号。下面是一个调整您的第一种风格的示例:
switch (x) {
case 1:
DoSomething(0);
break;
case 2:
{
int superNum = GetSuperNumber();
DoSomething(superNum);
break;
}
}
如果没有缩进,则最后的case
或default
语句的右大括号具有相同的缩进,并且“落入”父开关的右大括号中,如下所示:
switch (x) {
case 1:
DoSomething(0);
break;
case 2:
{
int superNum = GetSuperNumber();
DoSomething(superNum);
break;
}
}
这掩盖了等级制度,在我看来,更难理解。除非出于一致性的原因,您被迫使用现有的代码样式,或者该样式是强制要求您使用的,否则第1种样式是一个不错的选择(也是我最喜欢的)。这仍然有效吗?您链接的文档似乎不再被维护。我正在使用的Link(EsLIt)似乎更喜欢这种格式,但是IMO,不像 Case被分隔开。这种样式在<代码>外壳> /Cudio> SATME和添加支架时定义局部变量(C++中与C相反)。如果不对开关的端部支架进行“干扰”,则在支架上使用此样式是不合适的?因此,OP中的第一种风格是我的最爱,在大多数情况下效果良好。关于一致性的好观点…避免为了一致性而重新格式化。
switch (x) {
case 1:
DoSomething(0);
break;
case 2:
{
int superNum = GetSuperNumber();
DoSomething(superNum);
break;
}
}