【C++】switch文の書き方

目次

結論

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;
}
switch文で指定した変数以外との比較ができない
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 に変数を入れることができない

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文 を使いこなして、きれいなコードを書けるようになりましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次