switch文とは?switch文で出来ることと使い方のまとめ
18/11/11 15:46:24 19/05/05 15:14:02
switch文は多くのプログラミング言語に使用される概念で、プログラミング言語全般の基本的な概念になります。言うなれば、if文のようなものです。もっと言えば、switch文はif文同様に条件分岐に使うロジックなので、if文と比較して解説されることがほとんどです。
switch文はif文同様プログラミング言語の基本なのでどのプログラミング言語にも使われているのですが、今回はC言語をベースに解説していきます。ただし、C言語だから何か特殊な用法が含まれているわけではなく、たとえばJavaやSwiftなどでもほぼ使い方は同じです。
言語仕様上微妙に書き方は違いますが、ロジック自体はほぼ同じなので、C言語での使い方がわかれば後は各プログラミング言語仕様に合わせて記述するだけです。その点についてもif文同様と言えるでしょう。
ちなみにC言語を選んだ理由としては、一般的に認知されている言語のなかで古いからです。JavaやSwiftのswitch文がC言語のswitch文を参考にして作られたというわけではありませんが、先に存在したC言語の影響は少なからずあったかと思います。
C言語より古い言語ではアセンブラにもswitch文はありますが、アセンブラは誰も使っていないかと思うのでスルーすることにします。またCOBOLについてはswitch文ではなく、同じ使い方のものとしてEVALUATE文があります。
switch文の概念は古くからある概念で、新しい言語でも使われている、ということです。
目次
switch文で出来ること
switch文で出来ることは、上記の通り条件分岐です。ここで気になるのがif文との違いですが、switch文の方がいろいろな場合にわけて処理を実装することが可能です。if文の場合、基本的に○○か○○でないか、という二つに条件分岐させます。
たとえば、フラグが立っていたら処理を行う、そうでなかったら処理を行わない、といった使い方がif文の基本です。一方で、switch文の場合並列で複数の処理パターンを用意することができます。
たとえば、フラグが1だったら1のときの処理、フラグが2だったら2のときの処理、フラグがなかったらなかったときの処理、といったイメージです。もちろんif文でもネスト(if文のなかにさらにif文を作って条件分岐を深めること)によって条件ごとの処理を実装することが可能です。
たとえば、まず一つ目のif文でフラグがあるかどうかを判定する、フラグがなかったら終了、フラグがあった場合は次のif文でフラグが1かどうか判定する、1だったら1の処理を行い、1でなかったら次にフラグが2かどうかを判定する。
2だったら2の処理を行い、2でなかった場合は例外処理を行う、といったイメージです。文章で見ていてもよくわからなくなりそうですが、要するに1つずつ比較すればif文でも複数の条件分岐が可能だということです。
しかし、複数の条件がある際にはif文で実装するのは面倒でわかりにくいです。そこで便利なのがswitch文です。
switch文の使い方
switch文の概要は上記の通りですが、実際のソースコード例を見てswitch文の使い方を確認しましょう。まずswitch文のフォームは以下のようになります。
switch(式) {
case 値1:
式の結果と値1が一致したときの処理
break;
case 値2:
式の結果と値2が一致したときの処理
break;
default:
式の結果がどの値とも一致しなかったときの処理
}
caseの後ろにそれぞれ条件を記述し、なかに処理を記述します。処理の後ろにbreakが付いていますが、これはswitch文を抜けるためのものです。breakがないとそのままswitch文のなかの処理が継続されるので、他のcaseの条件に合致しなければ最後のdefaultの処理が実行されてしまいます。
このdefaultというのはどのcaseにも当てはまらなかった場合の処理です。上記の通りbreakさせないとdefaultの処理も実行されてしまうのですが、基本的にはbreakさせるのでcaseに当てはまらなかったときのみ実行されます。
コードとしてはdefaultとなっていますが、どちらかというと例外処理の記述に使う場合が多いでしょう。caseの方に例外を書くという考え方も出来ますが、そのようなシステムはあまりないかと思います。次にサンプルコードを紹介します。
#include <stdio.h>
int main(void) {
// サイコロの出目
int number = 5;
switch(number) {
case 1:
printf("1の目が出ました\n");
break;
case 2:
printf("2の目が出ました");
break;
case 3:
printf("3の目が出ました");
break;
case 4:
printf("4の目が出ました");
break;
case 5:
printf("5の目が出ました");
break;
case 6:
printf("6の目が出ました");
break;
default:
printf("numberの値が不正です");
}
return 0;
}
上記のソースコードを実行すると、コンソールには以下のように出力されます。
5の目が出ました
本来は最初の変数を1~6のランダムで取るかと思いますが、今回はswitch文に集中するために変数はランダムではなく5を入れました。上記のサンプルコードはswitch文を学習する際に最初によく出てくる例です。
また、ループ分のなかにswitch文を入れることも多いですが、その場合breakはループには反映されません。つまり、breakして抜けるのはあくまでもswitch文だけで、ループまで抜けるわけではないということです。
たとえば、以下のようなサンプルコードがあります。
#include <stdio.h>
int main(void) {
// ループ回数のカウント変数
int loopCount;
printf("ループ開始\n");
for(loopCount = 1; loopCount <= 3; loopCount ++) {
// case 1へ行くswitch文
printf("%d回目のループでswitch文開始\n", loopCount);
switch(1) {
case 1:
printf("%d回目のループでcase1 \n", loopCount);
break;
case 2:
printf("%d回目のループでcase2\n", loopCount);
break;
}
printf("%d回目のループでswitch文終了\n", loopCount);
}
printf("ループ終了\n");
return 0;
}
上記のソースコードを実行すると以下のようにコンソール出力されます。
ループ開始
1回目のループでswitch文開始
1回目のループでcase1
1回目のループでswitch文終了
2回目のループでswitch文開始
2回目のループでcase1
2回目のループでswitch文終了
3回目のループでswitch文開始
3回目のループでcase1
3回目のループでswitch文終了
ループ終了
まずswitchの後ろのかっこには1が入っているので、case1にしか行かない仕様になっています。そしてループカウントを加算、出力しながらループを回しているのですが、1回目のcase1のbreakを実行しても、ループ自体は抜けないという確認でした。
1回目のループでbreakしても2回目のループが回ってくるという非常に簡単な確認だったのですが、重要な概念です。他にもswitch文には応用的な使用法がありますが、まずは今回紹介した基本を押さえ、必要であればその都度調べてみてください。
案件量が豊富なアルマサーチ
最後に、アルマサーチのご紹介!
アルマサーチはフリーランス向けに案件をご紹介することに特化したエージェントサービスです。豊富な案件量から、安定して継続的な案件のご紹介を実現しており、口コミから登録エンジニアが急増中です。
アルマサーチが選ばれる理由
- 豊富な案件量。週3?4日の案件や在宅リモート案件も。
- 優秀なコンサルタント陣。
- 案件に参画後もしっかりサポート。
豊富な案件量
フリーランス向けに特化し、業界屈指の案件量を誇ります!週3?4日の案件や、在宅リモート案件もありますし、その他あらゆる希望をしっかりお伝えください。最適な案件のご紹介をさせていただきます。
優秀なコンサルタント陣
技術に疎く、開発の希望を伝えても響かないエージェント・・・嫌ですよね。アルマサーチにはそのような者は一切おりません!さらに独立にまつわる税金や保険関係に詳しいスタッフが徹底的にサポートさせていただきます。
案件に参画後もしっかりサポート
常駐先が決まった瞬間に、一度も連絡が取れなくなるエージェント・・・いますよね?アルマサーチでは、そのようなことは一切ありません!常に電話やメールは即対応しますし、月に1度のランチミーティングなどから現場の状況を細かくヒアリングし、就業環境改善に尽力いたします。
人気記事