C#入門⑦ switch文 ── 選択肢が多いときの分岐
前回は「if文(もし〜なら)」の話をしました。
今回は、もうひとつの分かれ道。switch文(スイッチぶん)です。選択肢がたくさんあるときに、すっきり書けます。
switch文とは、「この値だったら、これ」という、値ごとの仕分けです。
なぜ、もうひとつの分岐があるのか
if文でも、else if を使えば、たくさんの分岐が書けました。でも、こういう場合を考えてみてください。
「曜日の番号(1〜7)によって、曜日名を表示する」
これをif文で書くと、こうなります。
if (day == 1)
{
Console.WriteLine("月曜日");
}
else if (day == 2)
{
Console.WriteLine("火曜日");
}
else if (day == 3)
{
Console.WriteLine("水曜日");
}
// ... 日曜日まで続く
day == ○○ を、何度も書くことになります。少し、くどいですよね。
こういう「ひとつの値を、いろんな候補とくらべる」場面で、switch文が活躍します。料理でいうなら、「注文を聞いて、メニューごとに作るものを変える」ような仕分けです。
書き方を見てみる
さっきの曜日の例を、switch文で書いてみます。
int day = 3;
switch (day)
{
case 1:
Console.WriteLine("月曜日");
break;
case 2:
Console.WriteLine("火曜日");
break;
case 3:
Console.WriteLine("水曜日");
break;
default:
Console.WriteLine("その他の曜日");
break;
}
day は3なので、「水曜日」と表示されます。
形を見てみましょう。
switch (day)… このdayの値を仕分けますよ、という宣言case 1:… 「もし1だったら」case 2:… 「もし2だったら」default:… 「どれにも当てはまらなかったら」(if文の else にあたる)
switch のカッコの中の値(day)が、上から case の値とくらべられ、一致したところの処理が実行されます。
break を忘れずに
switch文には、ひとつ大事なルールがあります。各 case の最後に、break; をつけることです。
case 3:
Console.WriteLine("水曜日");
break; // ← これが必要
break は「ここで仕分けを終わり、switchから抜ける」という意味です。
これを忘れると、エラーになります(C#の場合)。「処理が終わったら、ちゃんと抜ける」と覚えておきましょう。
if文と、どう使い分けるか
ここがいちばん大事なところです。
- if文 … 「18以上か」「60点以上か」のような、範囲やくらべごとの判定が得意
- switch文 … 「1ならこれ、2ならこれ」のような、決まった値ごとの仕分けが得意
たとえば「点数が80以上なら合格」はif文向き(範囲のくらべ)。
「曜日番号ごとに曜日名」はswitch文向き(決まった値の仕分け)。
どちらでも書けることは多いですが、「値がきっちり決まっている仕分け」なら、switchの方がすっきりする。そんな感覚で選べば大丈夫です。
つまずきポイント
初心者がつまずくのは、やはり break の付け忘れ です。
case 1:
Console.WriteLine("月曜日");
// break を忘れている!
if文にはなかったルールなので、switchに切り替えた途端、忘れがちです。「caseを書いたら、breakもセット」と、ペアで覚えてしまうのがコツです。
まとめ
switch文は、ひとつの値を、候補ごとに仕分けする分岐。
switch (値)で仕分け開始case ○○:で「もし○○だったら」default:で「どれにも当てはまらないとき」- 各caseの最後に
break;を忘れない
範囲のくらべは if文、決まった値の仕分けは switch文。
次回は、同じことを何度もくり返す for文 です。プログラムが本領を発揮する、第二の山場です。

