English 中文(简体)
Java switch语句:是否需要用大括号?
原标题:
  • 时间:2009-03-11 06:00:41
  •  标签:

考虑以下两个带括号的代码片段:

switch (var) {
  case FOO: {
    x = x + 1;
    break;
  }

  case BAR: {
    y = y + 1;
    break;
  }
}

没有支架。

switch (var) {
  case FOO:
    x = x + 1;
    break;

  case BAR:
    y = y + 1;
    break;
}

我知道,在括号片段中,通过在每个case中包含括号来创建新作用域。然而,如果每个case不需要新作用域(即没有重用变量名称),是否使用括号会有任何性能惩罚?

最佳回答

使用大括号和case语句会有任何性能惩罚吗?

没有。

花括号的作用是帮助编译器确定变量、条件、函数声明等的作用域。一旦代码编译为可执行文件,它不会影响运行时性能。

问题回答

从执行角度来看,没有性能惩罚。

从编译角度来看,会有轻微的性能损失,因为有更多需要分析的内容,但如果有人真的关注这点,他们就必须把自己的代码都写成一行 :-)。

现在是我们发帖的个人意见部分......我总是加上{和},因为维护性会受到惩罚,因为你可能以后不得不加上它们,而且以后加上它们可能会很痛苦......但这是103%个人偏好。

正如我们所知,switch语句中的花括号是不必要的。使用花括号可能会导致对case作用域的混淆。

一个起始大括号通常与一些有意义的东西相关联,比如一个函数的开始,一个循环的开始,一个类声明的开始或一个数组初始化的开始等等...我们知道,当一个中断语句出现时,一个 case 会跳出 switch 块。因此,对于一个无知的读者来说,使用花括号似乎暗示了 case 的不同作用域。因此,为了更好的编程可读性,最好避免使用花括号。

即,当我有像这样的东西时,

switch(i)
{
  case 1 :
  {
     //do something
  }
  System.out.println("Hello from 1");

  case 2: 
  ....
}

“Hello from 1”被打印出来。但是花括号的使用可能会让一个无知的读者认为该情况已经以 } 结束,已经知道在循环,方法等情况下花括号通常表示什么。

就像C语言中的跳转到标签语句一样,控制流就会转移到case并继续执行。因此,以此理解,在编写开关的情况下使用大括号只是一种不良实践。

从技术上讲,只要使用有效的语法,您可以将任何代码块用额外的花括号括起来。至少在我看来,在switch中使用花括号看起来很糟糕,因为它似乎给人一种不同的感觉,正如我上面所说的那样。

我的建议:尽量避免在 switch cases 中使用周围的花括号。

戴牙套。

使用switch语句时,可能会出现很多问题,因此我尽可能避免使用它们。

  1. Forgetting breaks and thus having case fall-throughs
  2. Forgetting a default case and thus not catching an un-catered for condition
  3. Accidentally reusing variables between case statements, or worse yet, affecting a variable which IS sharing a variable between case statements.

使用大括号是防止在不同案例语句之间故意或意外共享变量的一种方法。

这个问题可能会被关闭为“争论性”(花括号战争!),但是管它呢。我实际上喜欢在代码块后使用花括号。对我来说,这使得丑陋的语句切换语法更像语言结构的其他部分。(在这种情况下使用花括号并没有什么惩罚)

您说支架可以省略,因为没有重复使用变量名。通过重复使用变量名,我指的是声明相同类型的新变量。

括号实际上最有用的是确保您不会错误地在不同的case中重复使用相同的变量。它们今天不声明任何变量,但明天有人会添加它们,而没有括号,代码就容易出错。

我不会在switch语句中使用大括号。

  • 如果不加大括号,switch语句看起来已经够华丽了。

  • Switch语句应该非常简短。当需要声明变量时,这意味着你做错了。

现在开始维护一些遗留的C代码,其中有500多行的switch case。

我以前从未想过这件事。以前从未在案例条款中需要过支架,所以真的不明白为什么需要它们。 个人认为我不喜欢“易于维护”的想法,这只是废话,如果代码有意义并且已记录,那么它将更容易维护。

没有大括号...简约更好





相关问题
热门标签