95

考虑以下两个带有大括号的片段:

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

我知道,在带有大括号的代码段中,通过将每个案例括在大括号中来创建一个新的范围。但是,如果每个案例都不需要新的范围(即没有变量名被重用),那么在案例中使用大括号是否会降低性能?

4

8 回答 8

111

将大括号与案例一起使用是否会降低性能?

没有任何。

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

于 2009-03-11T06:05:56.663 回答
23

从执行的角度来看,没有性能损失。

从编译的角度来看,性能会略有下降,因为要解析的内容更多,但如果有人真的关心它,他们将不得不将他们的代码全部写在一行上:-)

现在对于我们帖子的意见部分...我总是放入 { 和 } 因为对可维护性有一个惩罚,因为您可能不得不在以后将它们放入,而且放置它们可能会很痛苦稍后……但那是 103% 的个人偏好。

于 2009-03-11T06:24:33.063 回答
16

正如我们所知,switch case 的大括号是不必要的。使用大括号 case 可能会导致对 case 范围的混淆。

左大括号通常与有意义的事情相关联,例如函数的开始或循环的开始或类声明的开始或数组初始化的开始等......我们知道,当遇到中断时,case 会从 switch 块中中断陈述。因此,对于无知的读者来说,使用花括号似乎意味着不同的 case 范围。因此,为了更好的编程可读性,最好避免使用花括号。

即当我有类似的东西时,

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

  case 2: 
  ....
}

“Hello from 1”被打印出来。但是使用大括号可能会暗示一个无知的读者认为案例以'}'结尾,已经知道大括号在循环、方法等情况下通常意味着什么。

就像我们在“C”中有跳转到标签语句一样,控件只是切换到大小写并继续执行。因此,有了这种理解,在为 switch 编写 case 时使用花括号只是一种不好的做法。

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

我的建议:只是避免在开关盒中使用周围的大括号。

于 2009-03-11T10:55:47.607 回答
13

带大括号。

switch 语句有很多可能出错的地方,我尽量避免它们,即

  1. 忘记休息,从而导致案件失败
  2. 忘记默认情况,因此不会捕获不满足条件的情况
  3. 意外地在 case 语句之间重用变量,或者更糟糕的是,影响在 case 语句之间共享变量的变量。

使用大括号是防止 case 语句之间有意和无意共享变量的一种方法

于 2009-03-11T06:27:07.503 回答
5

这个问题可能会被关闭为“争论”(BRACE WAR!),但到底是什么。我实际上喜欢病例后的牙套。对我来说,它使丑陋的 switch 语法看起来更像其他语言结构。(在这种“情况”中使用大括号不会受到惩罚)

于 2009-03-11T06:07:04.913 回答
5

您说可以省略大括号,因为没有重用变量名称。通过重用变量名,我假设您的意思是声明一个相同类型的新变量。

大括号实际上最有用,可以确保您最终不会case错误地在不同的 s 中重用相同的变量。他们今天没有声明任何变量,但是明天有人会添加它们,并且没有大括号,代码很容易出错。

于 2009-03-11T06:13:47.253 回答
3

我不会将大括号用于开关盒。

  • 没有大括号的 switch 语句看起来已经足够巴洛克了。

  • 开关盒应该很短。当您需要声明变量时,这表明您做错了。

现在开始维护一些遗留的 C 代码,这些代码包含 500 多行的切换案例......

于 2009-03-11T09:42:06.160 回答
1

我以前从未想过。在 case 子句中从来不需要大括号,所以无法真正理解为什么需要它们。就我个人而言,我不赞成“它会更容易维护”的想法,那只是垃圾,如果代码有意义并且有文档记录,它会更容易维护。

没有大括号......语法越少越好

于 2009-03-11T06:55:37.230 回答