前回は「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文 です。プログラムが本領を発揮する、第二の山場です。