プログラミング言語C#におけるswitch文について、C#初心者向けにエンジニアの筆者が解説します。
switch文はif文と似ており、よく使われる構文の1つです。
本記事を読めば、C# switch文の書き方、break・defaultとは何か・if文とswitch文の使い分け、フォールスルーの禁止について理解できるでしょう。
ぜひ最後まで読んで、C# switch文を理解してください!
専門領域:C#,プログラミング,SQL
ピーコック アンダーソン
20年ほどプログラマーとして活動。初期の頃は様々な現場を転々とするプログラマーとして10年ほど経験を積み,その後大手メーカーに入社。C#やSQLServerを中心とした製品開発にて設計、製作、保守、プロジェクトリーダー等を10年近く担当。
…続きを読むINDEX
C# switch文の書き方
Switch文は、変数などで受け取った変数値の結果を元に、実行する処理を変えたいときに使用します。先ず、Switch文の構文は以下の通りです。
1 2 3 4 5 6 7 |
//サンプルコード1 switch( 変数 ) { case 値A: //変数が値Aのとき実行される 文A break; // 文Aの実行が終わったらswitchから抜ける。 case 値B: //変数が値Bのとき実 |
\文字より動画で学びたいあなたへ/
Udemyで講座を探す >フォールスルー
1 2 3 4 5 6 7 |
行される 文B break; // 文Bの実行が終わったらswitchから抜ける。 default: //上記の条件に変数がどれも当てはまらない場合に実行される。 文C break; // 文Cの実行が終わったらswitchから抜ける。 } |
switch文
指定された変数値を元に一致するcase値の制御文を実行します。
値には整数型(int)もしくは文字列、列挙体などが使用できます。floatやdouble型などの浮動小数点は誤差が発生する可能性があるため推奨されていません。
break文
switchのブロックから抜けます。break文の後は実行されません。
for,while文などの場合はループから脱出するときに使われます。
default文
変数が全てのcaseの値に一致しない場合に実行されます。
デフォルトで実施する処理がない場合は,break;のみを記載しましょう。
または、defaultセクションを消すことで何も処理がおこなわれないままSwitch文を抜けることができます。
if文とswitch文の使い分けのポイント
switch文を今回解説していますが、if文でも同じ内容を書くことはもちろん可能です。
使い分けのポイントとしては、
①単純な2分岐であれば、if文を使う
②多分岐(3分岐)以上であればswitch文を使う
多分岐の場合は特にswitch文を使うことでプログラミングのコードの見やすさが向上し管理がしやすくなります。
また、多分岐の場合ではswitch文のほうがif文よりも速いとされています。
C#のswtich文では,条件式の評価結果に整数(int型)以外に文字列(string型)も利用できます。
switch文を使いこなすことができれば、かなり便利です。
実際にswitch文を書いてみよう(int型)
先程、紹介したswitch文の構文を使って、プログラムを書いてみましょう。
以下、サンプルコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//サンプルコード2 int num = 2 switch (num) { case 1: //numが「1」の時に実行する Console.WriteLine("case1が実行されました"); //コンソール画面に「case1が実行されました」と出力する break; //switch文を抜ける case 2: //numが「2」の時に実行する Console.WriteLine("case2が実行されました"); //コンソール画面に「case2が実行されました」と出力する break;//switch文を抜ける default: //numが「1」と「2」以外の時に実行する Console.WriteLine("defaultが実行されました"); //コンソール画面に「defaultが実行されました」と出力する break;//switch文を抜ける } |
1 2 |
//実行結果 case2が実行されました |
変数numで受け取ったint値を元に、実行する内容を変えることができました。
実際にswitch文を書いてみよう(string型)
先程int型でのswitch文を紹介しました。続いては string型でのswitch文の書き方です。
C/C++では整数型(int)のみを制御式の値に使用できますが、文字列の利用できませんでした。
C#ではswitch文の制御値に文字列型の利用が可能です。
それでは、実際にサンプルコードを見て行きましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//サンプルコード3 String str = "りんご"; switch (str) { case "りんご": //strが「りんご」の時に実行する Console.WriteLine("赤色です。"); //コンソール画面に「赤色です」と出力する。 break; //switch文から抜ける case "バナナ": //strが「バナナ」の時に実行する Console.WriteLine("黄色です"); //コンソール画面に「黄色です」と出力する。 break; //switch文から抜ける default: //strが上記以外の場合に実行する Console.WriteLine("何色かわかりません。"); //コンソール画面に「何色かわかりません。」と出力する。 break; //switch文から抜ける } |
1 2 |
//実行結果 りんごは、果物です。 |
String型のstrに文字列が入力されており、その値を元にcase文が実行されています。
C# switch文 フォールスルーの禁止について
C#でのSwitch文では、フォールスルーが禁止されています。
フォールスルーとは、switch文でbreak文を省略した書き方のことです。
まず、C/C++などでは下記のような書き方ができます。
1 2 3 4 5 6 7 8 9 10 11 12 |
//サンプルコード4 int num =1; switch(num){ case 0: printf("ケース0が実行されました"); case 1: //numが「0」でも「1」でも実行される。 printf("ケース1が実行されました"); break; default: printf("デフォルトが実行されました"); break; } |
先程,勉強したcase文のサンプルコード1に似ていますが、case0にbreak文がありません。
これは,break文を書き忘れたのでしょうか?
いいえ、C/C++ではこのような記載ができ、case文が失敗しない限りは次のcase文も実行したいときに書きます。
C/C++では、こちらのコンパイルが可能です。実際に実行すると下記のようになります。
1 2 3 |
//numが0の時 ケース0が実行されました ケース1が実行されました |
1 2 |
//numが1の時 ケース1が実行されました |
1 2 |
//numが2の時 デフォルトが実行されました |
C#では、このフォールスルー書き方が禁止されました。
理由の一つとしては、このフォールスルー処理が意図して書かれたものなのか、間違ってbreak文を書き忘れてしまったのかの判断ができないですよね。
バグの温床となってしまうからです。
C#ではこのコードを実際にコンパイルしようとすると,エラーが出てきます。
C#では、必ずcase文のラベル毎に「break」「goto」「return」のどれかを含めた記述をしましょう。
C#におけるswitch文をマスターしよう
プログラミング言語C#のswitch文が理解できましたか?繰り返しになりますが、switch文はよく使う構文の1つなので、ぜひ理解しておきましょう。
C#の重要文法について手を動かしつつ動画で学びたいような方には、下記の講座がおすすめです。
C#文法1:C#で最初に身に着けるべき30の文法
C#文法基本のキ:if文などの王道の文法からクラス,インスタンス,インタフェース,抽象クラス,Disposeなど,C#初心者がつまずきそうな部分を丁寧に動画で解説しています
\無料でプレビューをチェック!/
講座を見てみるレビューの一部をご紹介
評価:★★★★★
コメント:初学者のレビューですが、導入として素晴らしいと感じました。(導入として) 本編が適切なボリューム・密度であることに加え、私としてはボーナス レクチャーのラーニング パスが非常に参考になりました。その他の講義も受講させていただこうと考えています。
評価:★★★★★
コメント:非常に丁寧に説明していてわかりやすいです。一回の視聴では理解できていない部分もあるので、実践と並行で繰り返し視聴して自分のものにしていこうと思います。
ぜひこの機会にC#の基礎を固めましょう!
最新情報・キャンペーン情報発信中