web-dev-qa-db-ja.com

Javaケースの切り替え:中括弧の有無は?

ブレース付きの次の2つのスニペットを検討してください。

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

中かっこを含むスニペットでは、各ケースを中かっこで囲むことで新しいスコープが作成されることを知っています。ただし、各ケースが新しいスコープを必要としない(つまり、変数名が再利用されていない)場合、ブレースをケースで使用することで何らかのパフォーマンスの低下が発生しますか?

79
cdmckay

ケースにブレースを使用すると、パフォーマンスが低下しますか?

なし。

中括弧は、コンパイラが変数、条件、関数宣言などのスコープを把握するのに役立ちます。コードが実行可能ファイルにコンパイルされると、ランタイムのパフォーマンスには影響しません。

89
MrValdez

実行の観点からパフォーマンスが低下することはありません。

解析する必要があるため、コンパイルの観点からはパフォーマンスがわずかに低下しますが、実際にそれを心配している人がいる場合は、コードをすべて1行で記述する必要があります:-)

そして今、私たちの投稿の意見部分のために...私は常に{と}を入れています後で...しかし、それは103%の個人的な好みです。

20
TofuBeer

これはextreme早すぎる最適化の例です。読みやすくデバッグしやすい方法を心配する方が良いでしょう。

19
tsimon

スイッチケース用の中括弧は必要ありません。中かっこを使用すると、ケースの範囲に関して混乱が生じる可能性があります。

通常、開き中かっこは、関数の開始、ループの開始、クラス宣言の開始、配列の初期化の開始など、意味のある何かに関連付けられます...ステートメント。したがって、中括弧を使用することは、無知な読者にとって、大文字と小文字の別のスコープのアイデアを暗示しているようです。そのため、プログラミングを読みやすくするために、中括弧を使用しないようにすることをお勧めします。

つまり、次のようなものがあるとき、

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

  case 2: 
  ....
}

「Hello from 1」が出力されます。しかし、中括弧の使用は、ケースが「}」で終わることを無知な読者に示唆する可能性があり、ループ、メソッドなどの場合に一般的に中括弧が何を意味するかをすでに知っています。

「C」にラベルへジャンプするステートメントがあるように、コントロールは大文字と小文字にシフトし、実行を継続します。そのため、切り替えのケースを作成する際には、中括弧を使用するのは悪い習慣です。

技術的に言えば、有効な構文で使用する場合、コードのブロックを追加の波括弧で囲むことができます。スイッチでブレースを使用することは、少なくとも私にとっては非常に悪いように見えます。

私の提案:スイッチケースに周囲の中括弧を使用しないでください。

12
Real Red.

ブレース付き。

Switchステートメントで問題が発生する可能性があるので、できる限り避けるようにしています。

  1. 休憩を忘れて、ケースフォールスルーを持っている
  2. デフォルトのケースを忘れ、したがって未分類の条件をキャッチしない
  3. 誤ってcaseステートメント間で変数を再利用するか、さらに悪いことに、caseステートメント間で変数を共有するIS.

中括弧を使用することは、caseステートメント間で変数を意図的および偶発的に共有することを防ぐ1つの方法です

9
jklp

この質問はおそらく「論証的」(BRACE WAR!)として閉じられるでしょうが、一体何なのでしょう。私は実際に事件の後の中括弧が好きです。私にとっては、見苦しいスイッチ構文が他の言語構成要素のように見えます。 (この「ケース」で中括弧を使用してもペナルティはありません)

5
Andy White

あなたは、変数名が再利用されていないため、中括弧を省略できると言います。変数名を再利用するということは、同じ型の新しい変数を宣言することを意味すると思います。

中括弧は、間違って異なるcasesで同じ変数を再利用しないようにするために、実際に最も役立ちます。今日は変数を宣言していませんが、明日誰かがそれらを追加します。中括弧なしではコードはエラーを起こしやすいです。

5

スイッチケースにブレースを使用しません。

  • Switchステートメントは、括弧なしですでにバロックに見えます。

  • スイッチケースは非常に短くする必要があります。変数を宣言する必要があるとき、それはあなたが間違っていることを示しています。

次に、500行以上のケースを切り替えるスポーツの一部のレガシーCコードを保守します...

3
starblue

私はそれについて前に考えたことがありません。 case句にブレースが必要ないので、なぜブレースが必要なのか本当にわかりません。個人的には、「保守しやすくなる」という考えには行きません。それは単なるゴミです。コードが理にかなって文書化されていれば、保守しやすくなります。

中括弧なし...構文は少ない

1
Gareth Davis