切换语句格式

时间:2013-08-14 16:47:45

标签: coding-style switch-statement

我对如何格式化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;
}

我理解很多代码风格是优先的,所以我将我的官方问题设置为:

使用第二个或第三个选项是否存在根本错误,只要它在整个代码中保持一致?

5 个答案:

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

没有缩进,最终casedefault语句的右括号具有相同的缩进,并“落入”父switch的右括号,如下所示:

switch (x) {
case 1:
    DoSomething(0);
    break;
case 2:
{
    int superNum = GetSuperNumber();
    DoSomething(superNum);
    break;
}
}

这掩盖了层次结构,我认为这更难阅读。除非出于一致性原因而被迫使用现有代码样式或强制您使用该样式,否则第一种样式是一个不错的选择(也是我的最爱)。