C#のswitch文にbreakが必要な理由
【背景】
switch 文は C 言語ファミリーの構文を引き継いでいて、C/C++ から来ています。
C 言語の switch は
switch (x) {
case 1:
printf("1です");
case 2:
printf("2です");
}
のように書くと、条件に一致したところから下の case にも流れてしまう
これを フォールスルー(fall-through) と言います。
【なぜフォールスルーがあった?】
- もともと switch はアセンブリ言語のジャンプテーブル的な使い方が想定されていました。
- break を入れないことで「複数のケースをまとめて処理」できる柔軟性があったんです。
例:
switch (x) {
case 1:
case 2:
case 3:
printf("1〜3のいずれかです");
break;
}
こうすると 1, 2, 3 どれでも同じ処理ができる。
これを便利だとしたので、フォールスルーが仕様に残りました。
【C# でも同じ仕様にした理由】
- C# は C/C++/Java から来たプログラマーに違和感がないように、switch のフォールスルー仕様を踏襲。
- case の後に処理を書いたら break を忘れないようにルール化されました。
- Java も同じ仕組みです。
【C# ではフォールスルー禁止の方向に】
ただし C# では フォールスルーを原則禁止 しており:
- case は次の case に勝手に流れないようにコンパイルエラーになります。
- break か return などで必ずブロックを抜ける必要があります。
例外的に:
case 1:
case 2:
// これは OK(処理なしのフォールスルー)
Console.WriteLine("1 または 2");
break;
のように「ラベルだけ渡す」のはOK。
【まとめ】
✅ switch の break は
- フォールスルー防止のため
- 複数条件でまとめる柔軟性を残すため
- C 言語の歴史的経緯で生まれた
✅ C# は安全にするために
- 意図しないフォールスルーは禁止
- break 必須
という経緯で break が必要になった、というわけです。
訪問数 8 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません