Coding style 开关语句格式

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语句的格式有一段时间的争论。我看到了三种可行的选择,虽然我经常使用第一种(这是我最常看到的形式),但我发现第二种和第三种更直观

第一:

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;
}
}