- Day 9 のゴールと全体イメージ
- switch の基本:値に応じて分岐する
- case:それぞれの値に対する処理を書く
- default:想定外の値に対する「安全な受け皿」
- switch と if / else if の違い
- switch 式:値を返す新しい書き方
- switch の練習テンプレート:メニュー選択
- switch 式の練習テンプレート:成績ランク
- Day 9 のまとめ
- Day 9 ミニ課題のゴール
- メニュー選択を日本語で設計する
- ステップ1:メニュー表示と入力受付
- ステップ2:switch と case でメニューごとの処理を分ける
- ステップ3:default で「安全な受け皿」を用意する
- ステップ4:switch 式で「メニュー名」を返す
- ステップ5:メニュー名と処理を組み合わせた完成版
- Day 9 ミニ課題のまとめ
Day 9 のゴールと全体イメージ
Day 9 では、条件分岐のもう一つの重要な構文である switch を学びます。 Day 8 で学んだ if / else if / else は「条件が複雑なとき」に強いですが、 「同じ値に対して分岐をたくさん書きたい」ときには switch の方が読みやすくなることが多いです。
学ぶことは次のとおりです。
switchcasedefaultswitch式(新しい書き方)
これらをステップバイステップでかみ砕きながら、初心者の方でも自然に使えるようになることを目指します。
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 if と switch は、どちらも条件分岐ですが、得意な場面が少し違います。
if / else ifが向いている場面- 条件が「範囲」や「複雑な式」のとき
- 例:
score >= 90、age >= 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 を実践的に身につけていきます。 メニューは次のとおりです。
- 登録
- 一覧
- 検索
- 削除
- 終了
ここで学ぶことは、
switchcasedefaultswitch式
を、実際のプログラムの流れの中で使い分ける感覚をつかむことです。
メニュー選択を日本語で設計する
仕様を言葉で整理する
まずは、プログラムの仕様を日本語で整理します。
- メニューを画面に表示する。
- ユーザーに「番号」を入力してもらう。
- 入力された番号に応じて、次のように処理を分ける。
- 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を試してみる
といったアレンジをしながら、「値に応じて処理を切り替える」感覚を深めていってください。
