結論
switch (変数)
{
case 1:
// 変数 が 1 のときの処理
break;
case 2:
// 変数 が 2 のときの処理
break;
case 3:
// 変数 が 3 のときの処理
break;
default:
// どの case にも該当しなかったときの処理
break;
}
switch文とは
switch文とは、if文と同じように「〇〇のときに△△をする」という処理を書くための文です。
if文の書き方がわからないという方は、こちらの記事を参考にしてください。
書き方は以下のようになります。
switch (変数)
{
case 1:
// 変数 が 1 のときの処理
break;
case 2:
// 変数 が 2 のときの処理
break;
case 3:
// 変数 が 3 のときの処理
break;
default:
// どの case にも該当しなかったときの処理
break;
}
各caseの中の処理の最後には、必ず「break;」を書きましょう。
入れなかった場合は、その下の case の処理も実行されてしまいます。
(あえて「break;」を書かずに、その下の case の処理を実行する場合もあります)
これは、if文で書くとこのようになります。
if(変数 == 1)
{
// 変数 が 1 のときの処理
}
else if(変数 == 2)
{
// 変数 が 2 のときの処理
}
else if(変数 == 3)
{
// 変数 が 3 のときの処理
}
else
{
// どの if にも該当しなかったときの処理
}
サンプルコードはこちら
#include<iostream>
int main()
{
int a;
std::cin >> a;
switch (a)
{
case 1:
std::cout << "入力されたのは1でした" << std::endl;
break;
case 2:
std::cout << "入力されたのは2でした" << std::endl;
break;
case 3:
std::cout << "入力されたのは3でした" << std::endl;
break;
default:
std::cout << "入力されたのは1でも2でも3でもありませんでした" << std::endl;
break;
}
return 0;
}
if文との違い
「if文と何が違うの?」と思われる方もいると思うので、説明します。
できることは、if文のほうが多いです。
ほぼ上位互換と言っても良いでしょう。
switch文では、if文に比べると以下のような制約があります。
int a = 2;
switch(a)
{
case a <= 3: // このような条件は書けない
std::cout << "aは3以下" << std::endl;
break;
}
もちろん、if文では書くことができます。
int a = 2;
if(a <= 3)
{
std::cout << "aは3以下" << std::endl;
break;
}
int a = 2;
int b = 3;
switch(a)
{
case 1:
// a が 1 のときの処理
break;
case b == 3 // ここで a 以外を対象にした条件を書けない
// b が 3 のときの処理
break;
}
もちろん、if文では書くことができます。
int a = 2;
int b = 3;
if(a == 1)
{
// a が 1 のときの処理
}
else if(b == 3)
{
// b が 3 のときの処理
}
case にはコンパイル時に確定するものしか入れることができません。
int a = 2;
int b = 3;
switch(a)
{
case b: // b は変数なので入れることができない
// a と bが等しいときの処理
break;
}
もちろん、if文では書くことができます。
int a = 2;
int b = 3;
if(a == b)
{
// a と b が等しいときの処理
}
このように、switch文には様々な制約があります。
if文との使い分け
「if文のほうができることが多いなら、if文でいいじゃん」と思われる方もいるかと思いますので説明します。
極論、その通りです。
わざわざswitch文を使わなくても、if文ですべて補うことができます。
ですが、switch文を使うことで、読み手が分かりやすいコードを書くことができます。
ここで言う読み手とは、自分以外の人や、未来の自分のことです。
前述の制約は、裏を返せば
- 「等しい」かどうかでしか分岐していない
- switch文で指定した変数以外との比較していない
- 定数としか比較していない
ということを、switch文一つで読み手に伝えることができます。
なので、この制約に当てはまる場合は switch文 で書いたほうが良いと言えるでしょう。
また、switch文 は enum と非常に相性が良いです。
enum について理解されたい方は、以下の記事を参考にしてください。
(enumに関する記事は鋭意執筆中です。)
#include<iostream>
enum Num
{
One = 1,
Two,
Three
};
int main()
{
int a;
std::cin >> a;
switch (a)
{
case One:
// a が 1だったときの処理
break;
case Two:
// a が 2だったときの処理
break;
case Three:
// a が 3だったときの処理
break;
default:
// a が それ以外だったときの処理
break;
}
return 0;
}
このように、変数とenumの比較を行う場合は、積極的にswitchを使用すると良いでしょう。
まとめ
いかがだったでしょうか?
今回は switch文 についてまとめてみました。
switch文は、基本的に if文 の下位互換という位置づけですが、制約を上手く利用することで、読み手に優しいコードを書くことができます。
ぜひ皆さんも switch文 を使いこなして、きれいなコードを書けるようになりましょう!
コメント