基礎から学ぶC#入門 90日コース | C#基本文法 - Day 9:switch

C# 90日で身につけるC#
スポンサーリンク
スポンサーリンク
  1. Day 9 のゴールと全体イメージ
  2. switch の基本:値に応じて分岐する
    1. 「この値なら A、この値なら B…」をまとめて書く
  3. case:それぞれの値に対する処理を書く
    1. 具体例:曜日番号から曜日名を表示する
  4. default:想定外の値に対する「安全な受け皿」
    1. 「どれにも当てはまらないとき」の処理を書く
  5. switch と if / else if の違い
    1. どちらを使うかのざっくりした目安
  6. switch 式:値を返す新しい書き方
    1. 「switch で分岐して、その結果の値を返したい」
    2. 具体例:曜日番号から曜日名を返す switch 式
  7. switch の練習テンプレート:メニュー選択
    1. メニュー番号に応じて処理を切り替える
  8. switch 式の練習テンプレート:成績ランク
    1. 点数から成績ランクを返す
  9. Day 9 のまとめ
  10. Day 9 ミニ課題のゴール
  11. メニュー選択を日本語で設計する
    1. 仕様を言葉で整理する
  12. ステップ1:メニュー表示と入力受付
    1. Console.WriteLine と ReadLine の基本
  13. ステップ2:switch と case でメニューごとの処理を分ける
    1. 「この番号ならこの処理」をコードで表現する
  14. ステップ3:default で「安全な受け皿」を用意する
    1. 想定外の入力に備える
  15. ステップ4:switch 式で「メニュー名」を返す
    1. 値を返したいときは switch 式が便利
  16. ステップ5:メニュー名と処理を組み合わせた完成版
    1. 「選択されたメニュー名」と「処理」を両方表示する
  17. Day 9 ミニ課題のまとめ

Day 9 のゴールと全体イメージ

Day 9 では、条件分岐のもう一つの重要な構文である switch を学びます。 Day 8 で学んだ if / else if / else は「条件が複雑なとき」に強いですが、 「同じ値に対して分岐をたくさん書きたい」ときには switch の方が読みやすくなることが多いです。

学ぶことは次のとおりです。

  • switch
  • case
  • default
  • switch 式(新しい書き方)

これらをステップバイステップでかみ砕きながら、初心者の方でも自然に使えるようになることを目指します。

switch の基本:値に応じて分岐する

「この値なら A、この値なら B…」をまとめて書く

switch は、

「ある値に応じて、複数の分岐の中から一つを選んで処理する」

ための構文です。

基本形は次のようになります。

switch (値)
{
    case 値1:
        // 値が 値1 のときの処理
        break;

    case 値2:
        // 値が 値2 のときの処理
        break;

    default:
        // どの case にも当てはまらないときの処理
        break;
}
C#

ここで登場するキーワードは、

  • switch:分岐の対象となる値を指定する
  • case:それぞれの分岐条件(値)を指定する
  • default:どの case にも当てはまらないときの処理
  • break:その case の処理を終えて、switch 文から抜ける

です。

case:それぞれの値に対する処理を書く

具体例:曜日番号から曜日名を表示する

まずは、switch の基本的な使い方を、曜日の例で見てみます。

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("曜日番号を入力してください(1〜7):");
        string dayText = Console.ReadLine();

        int day = int.Parse(dayText);

        // day の値に応じて分岐します
        switch (day)
        {
            case 1:
                Console.WriteLine("月曜日です。");
                break;

            case 2:
                Console.WriteLine("火曜日です。");
                break;

            case 3:
                Console.WriteLine("水曜日です。");
                break;

            case 4:
                Console.WriteLine("木曜日です。");
                break;

            case 5:
                Console.WriteLine("金曜日です。");
                break;

            case 6:
                Console.WriteLine("土曜日です。");
                break;

            case 7:
                Console.WriteLine("日曜日です。");
                break;

            default:
                Console.WriteLine("1〜7 の数字を入力してください。");
                break;
        }

        Console.ReadLine();
    }
}
C#

重要ポイント:

  • switch (day) のように、「分岐の対象となる値」を指定します。
  • case 1: のように、「この値のときの処理」を書きます。
  • case の最後には break を書いて、その分岐を終了します。
  • default は「どの case にも当てはまらないとき」の処理です。

default:想定外の値に対する「安全な受け皿」

「どれにも当てはまらないとき」の処理を書く

default は、

「どの case にも一致しなかったときに実行されるブロック」

です。

先ほどの曜日の例では、1〜7 以外の数字が入力されたときに、 default のメッセージが表示されました。

default:
    Console.WriteLine("1〜7 の数字を入力してください。");
    break;
C#

重要ポイント:

  • default は「最後の保険」として必ず書いておくと安全です。
  • ユーザー入力など「何が来るか分からない」値を扱うときは、 default でエラーメッセージや注意を表示するのが定番です。

switch と if / else if の違い

どちらを使うかのざっくりした目安

if / else ifswitch は、どちらも条件分岐ですが、得意な場面が少し違います。

  • if / else if が向いている場面
    • 条件が「範囲」や「複雑な式」のとき
    • 例:score >= 90age >= 20 && isStudent
  • switch が向いている場面
    • 「ある一つの値」に対して、「たくさんの候補の中から一つを選ぶ」とき
    • 例:メニュー番号、曜日番号、文字列のコマンドなど

初心者の方は、

「同じ変数の値に応じて分岐したいときは switch」 「条件式が複雑なときは if / else if

というざっくりしたイメージを持っておくと、使い分けしやすくなります。

switch 式:値を返す新しい書き方

「switch で分岐して、その結果の値を返したい」

C# には、従来の switch 文に加えて、switch という新しい書き方があります。 switch 式は、

「ある値に応じて、別の値を返す」

ための構文で、三項演算子の「多分岐版」のようなイメージです。

基本形は次のようになります。

var 結果 =switch
{
    値1 => 結果1,
    値2 => 結果2,
    _   => デフォルト結果
};
C#

ここでのポイントは、

  • switch の対象となる値の後に switch キーワードを書く
  • 各分岐は 値 => 結果 の形で書く
  • _ は「どれにも当てはまらないとき」のデフォルト(default のようなもの)

です。

具体例:曜日番号から曜日名を返す switch 式

先ほどの曜日の例を、switch 式で書き直してみます。

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("曜日番号を入力してください(1〜7):");
        string dayText = Console.ReadLine();

        int day = int.Parse(dayText);

        // switch 式で曜日名を決める
        string dayName = day switch
        {
            1 => "月曜日",
            2 => "火曜日",
            3 => "水曜日",
            4 => "木曜日",
            5 => "金曜日",
            6 => "土曜日",
            7 => "日曜日",
            _ => "不明な曜日"
        };

        Console.WriteLine($"曜日:{dayName}");

        Console.ReadLine();
    }
}
C#

重要ポイント:

  • switch 式は「値を返す」ので、変数への代入に向いています。
  • break は不要で、各分岐は => の右側の値を返します。
  • _ は「どのパターンにも一致しないとき」のデフォルトです。

switch の練習テンプレート:メニュー選択

メニュー番号に応じて処理を切り替える

switch の典型的な使い方として、「メニュー番号に応じて処理を変える」例を示します。

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("=== メニュー ===");
        Console.WriteLine("1: 挨拶");
        Console.WriteLine("2: 今日の日付を表示");
        Console.WriteLine("3: 終了");
        Console.WriteLine("番号を入力してください:");

        string menuText = Console.ReadLine();
        int menu = int.Parse(menuText);

        switch (menu)
        {
            case 1:
                Console.WriteLine("こんにちは!");
                break;

            case 2:
                Console.WriteLine($"今日の日付:{DateTime.Now.ToShortDateString()}");
                break;

            case 3:
                Console.WriteLine("終了します。");
                break;

            default:
                Console.WriteLine("不正な番号です。1〜3 を入力してください。");
                break;
        }

        Console.ReadLine();
    }
}
C#

このテンプレートは、

  • メニュー番号
  • コマンド番号
  • オプション選択

など、さまざまな場面に応用できます。

switch 式の練習テンプレート:成績ランク

点数から成績ランクを返す

switch 式は、「値を返したいとき」に特に便利です。 次の例では、点数から成績ランク(文字列)を返しています。

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("テストの点数を入力してください(0〜100):");
        string scoreText = Console.ReadLine();

        int score = int.Parse(scoreText);

        // switch 式で成績ランクを決める
        string grade = score switch
        {
            >= 90 => "A",
            >= 80 => "B",
            >= 70 => "C",
            >= 60 => "D",
            _     => "F"
        };

        Console.WriteLine($"点数:{score} 点");
        Console.WriteLine($"成績:{grade}");

        Console.ReadLine();
    }
}
C#

重要ポイント:

  • C# の新しい switch 式では、>= 90 のような「パターンマッチング」も書けます。
  • 上から順番に評価され、最初に一致したパターンの値が返されます。

Day 9 のまとめ

Day 9 では、条件分岐のもう一つの柱である switch を学びました。

  • switch
    • ある値に応じて、複数の case の中から一つを選んで処理する
    • default で「どれにも当てはまらないとき」の処理を書く
    • メニュー番号や曜日など、「離散的な値」に対する分岐に向いている
  • switch
    • ある値に応じて「別の値」を返す構文
    • 三項演算子の多分岐版のようなイメージ
    • 代入や戻り値の決定に向いている

条件分岐は、Day 8 の if と Day 9 の switch を組み合わせることで、 かなり柔軟に「プログラムの流れ」をコントロールできるようになります。

ぜひ、

  • メニュー番号やコマンド文字列を使って、switch 文を練習する
  • 点数やステータスコードからメッセージを返す switch 式を書いてみる
  • 「この場面は if がいいか、switch がいいか」を意識して選んでみる

といった練習を通して、「状況に応じて最適な分岐構文を選ぶ」感覚を育てていってください。


Day 9 ミニ課題のゴール

Day 9 のミニ課題では、「メニュー選択プログラム」を題材にして、switch を実践的に身につけていきます。 メニューは次のとおりです。

    1. 登録
    1. 一覧
    1. 検索
    1. 削除
    1. 終了

ここで学ぶことは、

  • switch
  • case
  • default
  • switch

を、実際のプログラムの流れの中で使い分ける感覚をつかむことです。

メニュー選択を日本語で設計する

仕様を言葉で整理する

まずは、プログラムの仕様を日本語で整理します。

  1. メニューを画面に表示する。
  2. ユーザーに「番号」を入力してもらう。
  3. 入力された番号に応じて、次のように処理を分ける。
    • 1 → 登録処理
    • 2 → 一覧表示処理
    • 3 → 検索処理
    • 4 → 削除処理
    • 0 → 終了メッセージを表示してプログラムを終える
    • それ以外 → 「不正な番号です」と表示する

この「日本語の設計」を、そのまま C# のコードに落とし込んでいきます。

ステップ1:メニュー表示と入力受付

Console.WriteLine と ReadLine の基本

まずは、メニューを表示して、番号を入力してもらう部分を書きます。

using System;

class Program
{
    static void Main(string[] args)
    {
        // メニューを表示します
        Console.WriteLine("=== メニュー選択プログラム ===");
        Console.WriteLine("1. 登録");
        Console.WriteLine("2. 一覧");
        Console.WriteLine("3. 検索");
        Console.WriteLine("4. 削除");
        Console.WriteLine("0. 終了");
        Console.WriteLine("番号を入力してください:");

        // 入力を文字列として受け取ります
        string input = Console.ReadLine();

        // 文字列を int に変換します(ここでは簡略化のため Parse を使用)
        int menu = int.Parse(input);

        // ここではまだ何もせずに終了します
        Console.ReadLine();
    }
}
C#

ポイント:

  • メニュー表示は Console.WriteLine を連続して使うだけで十分です。
  • Console.ReadLine() は必ず文字列(string)を返すので、数値として扱うには int.Parse などで変換します。

次のステップで、この menu 変数を switch で分岐させていきます。

ステップ2:switch と case でメニューごとの処理を分ける

「この番号ならこの処理」をコードで表現する

switch の基本形は次のようなイメージです。

switch (値)
{
    case 値1:
        // 値1のときの処理
        break;

    case 値2:
        // 値2のときの処理
        break;

    default:
        // どれにも当てはまらないときの処理
        break;
}
C#

これをメニュー番号に当てはめると、次のようになります。

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("=== メニュー選択プログラム ===");
        Console.WriteLine("1. 登録");
        Console.WriteLine("2. 一覧");
        Console.WriteLine("3. 検索");
        Console.WriteLine("4. 削除");
        Console.WriteLine("0. 終了");
        Console.WriteLine("番号を入力してください:");

        string input = Console.ReadLine();
        int menu = int.Parse(input);

        // menu の値に応じて処理を分岐します
        switch (menu)
        {
            case 1:
                Console.WriteLine("登録処理を実行します。");
                // ここに実際の登録ロジックを追加できます
                break;

            case 2:
                Console.WriteLine("一覧表示処理を実行します。");
                // ここに一覧表示ロジックを追加できます
                break;

            case 3:
                Console.WriteLine("検索処理を実行します。");
                // ここに検索ロジックを追加できます
                break;

            case 4:
                Console.WriteLine("削除処理を実行します。");
                // ここに削除ロジックを追加できます
                break;

            case 0:
                Console.WriteLine("プログラムを終了します。");
                break;

            default:
                Console.WriteLine("不正な番号です。0〜4 を入力してください。");
                break;
        }

        Console.ReadLine();
    }
}
C#

重要ポイント:

  • switch (menu) で「分岐の対象となる値」を指定します。
  • case 1: のように、「この値のときの処理」を書きます。
  • case の最後に break を書いて、その分岐を終了します。
  • default は「どの case にも当てはまらないとき」の処理です。

ステップ3:default で「安全な受け皿」を用意する

想定外の入力に備える

ユーザー入力では、想定外の値が入ってくることがよくあります。 そのときに何も表示されないと、ユーザーは「何が起きたか分からない」状態になります。

そこで、default を使って「安全な受け皿」を用意します。

default:
    Console.WriteLine("不正な番号です。0〜4 を入力してください。");
    break;
C#

重要ポイント:

  • default は「最後の保険」として必ず書いておくと安心です。
  • エラーメッセージや注意を表示することで、ユーザーに正しい操作を促せます。

ステップ4:switch 式で「メニュー名」を返す

値を返したいときは switch 式が便利

switch 式は、「値に応じて別の値を返す」ための構文です。 メニュー番号から「メニュー名」を返したいときに、とても書きやすくなります。

基本形は次のとおりです。

var 結果 =switch
{
    値1 => 結果1,
    値2 => 結果2,
    _   => デフォルト結果
};
C#

これをメニュー番号に当てはめると、次のようになります。

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("=== メニュー選択プログラム ===");
        Console.WriteLine("1. 登録");
        Console.WriteLine("2. 一覧");
        Console.WriteLine("3. 検索");
        Console.WriteLine("4. 削除");
        Console.WriteLine("0. 終了");
        Console.WriteLine("番号を入力してください:");

        string input = Console.ReadLine();
        int menu = int.Parse(input);

        // switch 式でメニュー名を決めます
        string menuName = menu switch
        {
            1 => "登録",
            2 => "一覧",
            3 => "検索",
            4 => "削除",
            0 => "終了",
            _ => "不明なメニュー"
        };

        Console.WriteLine($"選択されたメニュー:{menuName}");

        Console.ReadLine();
    }
}
C#

重要ポイント:

  • switch 式は「値を返す」ので、変数への代入に向いています。
  • break は不要で、各分岐は => の右側の値を返します。
  • _ は「どのパターンにも一致しないとき」のデフォルトです。

ステップ5:メニュー名と処理を組み合わせた完成版

「選択されたメニュー名」と「処理」を両方表示する

最後に、switch 式でメニュー名を決めつつ、switch 文で処理を分岐する「完成版」の例を示します。

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("=== メニュー選択プログラム ===");
        Console.WriteLine("1. 登録");
        Console.WriteLine("2. 一覧");
        Console.WriteLine("3. 検索");
        Console.WriteLine("4. 削除");
        Console.WriteLine("0. 終了");
        Console.WriteLine("番号を入力してください:");

        string input = Console.ReadLine();
        int menu = int.Parse(input);

        // switch 式でメニュー名を決める
        string menuName = menu switch
        {
            1 => "登録",
            2 => "一覧",
            3 => "検索",
            4 => "削除",
            0 => "終了",
            _ => "不明なメニュー"
        };

        Console.WriteLine($"選択されたメニュー:{menuName}");
        Console.WriteLine(); // 空行で見やすくします

        // switch 文で処理を分岐する
        switch (menu)
        {
            case 1:
                Console.WriteLine("登録処理を実行します。");
                // ここに登録ロジック(例:名前やメールアドレスの入力)を追加できます
                break;

            case 2:
                Console.WriteLine("一覧表示処理を実行します。");
                // ここに一覧表示ロジック(例:登録済みデータの表示)を追加できます
                break;

            case 3:
                Console.WriteLine("検索処理を実行します。");
                // ここに検索ロジック(例:キーワード入力と結果表示)を追加できます
                break;

            case 4:
                Console.WriteLine("削除処理を実行します。");
                // ここに削除ロジック(例:ID指定で削除)を追加できます
                break;

            case 0:
                Console.WriteLine("プログラムを終了します。");
                break;

            default:
                Console.WriteLine("不正な番号です。0〜4 を入力してください。");
                break;
        }

        Console.ReadLine();
    }
}
C#

このコードの中には、

  • switch 文:メニュー番号に応じて処理を分岐
  • case:それぞれのメニューに対応する処理
  • default:不正な番号に対するメッセージ
  • switch 式:メニュー番号からメニュー名を返す

という Day 9 の学習項目がすべて含まれています。

Day 9 ミニ課題のまとめ

メニュー選択プログラムを通して、

  • switch 文で「値に応じて処理を分ける」
  • case で「それぞれの値に対応する処理を書く」
  • default で「想定外の値に対する安全な受け皿を用意する」
  • switch 式で「値に応じて別の値を返す」

という流れを体験しました。

メニュー選択は、実際のアプリケーションでもよく使われるパターンです。 ぜひ、

  • メニュー項目を増やしてみる
  • 実際の登録・検索・削除のロジックを少しずつ追加してみる
  • メニュー番号を文字列(例:"reg", "list")にして switch を試してみる

といったアレンジをしながら、「値に応じて処理を切り替える」感覚を深めていってください。

タイトルとURLをコピーしました