この章のテーマ §
条件のによる分岐は多くの場合if文で記述しますが、条件の多い分岐にはswitch文も使用できます。
また、switchは式として使う方法もあります。式として使ったswitch式は式の一部に組み込めます。
前提知識 §
Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, int型, 複文, for文
解説 §
switch文は、if文の親戚ですが、if文が2つの【真】【偽】のケースしか扱えないのに対して、多数のケースを扱えます。
switch文は、以下の書式で書きます。
内容は、以下の書式を列挙します。
どのケースにてはまらないものは、defaultキーワードを使い処理内容を記述します。if文のelseに相当するものです。
switchを式として使う場合、書式は異なります。
内容は、以下の初期を列挙します。
defaultに相当するものは式の値を_としておきます。
実例はサンプルソースを参照して下さい。
罠の数々 §
- ここで使用されるbreak文は、ループから脱出するbreak文とは異なる機能性を与えられている
- switch文で個々のケースでのbreak文の記述は必須である (希に省略が許されることがある。この条件は他の似た構文のプログラミング言語とは異なるので、他の言語と混ぜて学習することはあまりお勧めではない)
- ループの中でswitch文を使ったとき、switch文の中にbreak文を書いてもループは脱出できない。switch文を終わらせる機能しか持たない
- C#のバージョンが古いとswitch式は使えない
- switch文、式では全ての型が使用できるわけではない
- 見かける頻度が少ないのでここでは解説していないが、値の一致ではなく大小比較を行うリレーションパターンも存在する
- 見かける頻度が少ないのでここでは解説していないが、whenキーワードを用いた追加条件を指定するケース ガードも存在する
参考リンク §
選択ステートメント - C# リファレンス
switch 式 - C# リファレンス
サンプルソース: kw_switch §
Console.WriteLine("swich文の場合");
for (int i = 0; i < 3; i++)
{
switch (i)
{
case 0:
Console.WriteLine("ZERO");
break;
case 1:
Console.WriteLine("ONE");
break;
default:
Console.WriteLine("OTHERS");
break;
}
}
Console.WriteLine("swich式の場合");
for (int i = 0; i < 3; i++)
{
var x = i switch
{
0 => "ZERO",
1 => "ONE",
_ => "OTHERS"
};
Console.WriteLine(x);
}
実行結果 §
swich文の場合
ZERO
ONE
OTHERS
swich式の場合
ZERO
ONE
OTHERS
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
以下のプログラムの実行結果を予測してみよう。
int i = 0;
switch (i)
{
case 0:
Console.WriteLine("ゼロだよ");
case 1:
Console.WriteLine("イチだよ");
break;
default:
Console.WriteLine("他の値だよ");
break;
}
- 「ゼロだよ」
- 「イチだよ」
- 「他の値だよ」
- 「ゼロだよ」+「イチだよ」
- コンパイルエラーで実行できない
[[解答]]