MENU

【C#】Switchとif文の使い分け

前置き

 地方の中小企業でプログラミングをして、4年ほどになりますが、唐突にとある疑問が頭に浮かびました。
「if文とswitch文って何が違うん?」

もちろんこれは文法がわからないとか書き方がわからないとかではなく、単純に「どうやって使い分けるの?」という疑問です。

プログラミングを学習しているときにIF文とswitch文は必ず出てきます。研修を受けているときもそうですし、本などでも出てきます。

 

IF文だけで、書けてしまう。

 

そうなんです。switch使わなくてもif文でやりたい処理を実装できるんですよね。

その結果本来は、switch文で書いた方が品質が上がる処理もif文で書いてしまいます。

結果if文しか使わないからswitchを使わなくなってしまいます。

 

switch文とif文の違い

前置きが長くなりなりましたが、swicth文とif文の違いは以下の通りです。

 

switch:特定の変数の値によって処理を分岐させる場合

if:それ以外(大雑把でごめんよ)

 

こんなことだけで伝わるのは多分最初から分かっている人だけだと思うので実際に例にしてみてみましょう。

 

switch文の方が適しているパターン

順位に応じて賞金を判断する処理の例を以下にしました。

switch

        /// <summary>
        /// ランクで賞金を判断する
        /// </summary>
        /// <param name="rank">順位</param>
        /// <returns>賞金</returns>
        public int JudgePrize(int rank)
      {
            int prize = 0;
          switch (rank)
            {
                // 1位の賞金 100万円
                case 1:
                    prize = 1000000;
                    break;

              // 2位の賞金 99万円
                case 2:
                    prize = 990000;
                    break;
                // 3位の賞金 50万円
                case 3:
                    prize = 500000;
                    break;
              default:
                    prize = 0;
                    break;
          }
            return prize;
      }

if文


        /// <summary>
        /// ランクで賞金を判断する
        /// </summary>
        /// <param name="rank">順位</param>
        /// <returns>賞金</returns>
        public int JudgePrize(int rank)
      {
            int prize = 0;
            if(rank == 1)
            {
                // 1位の賞金 100万円
                prize = 1000000;
            }
            else if(rank == 2)
            {
                // 2位の賞金 99万円
                prize = 990000;
            }
            else if(rank == 3)
            {
                // 3位の賞金 50万円
                prize = 500000;
            }
            else
            {
                prize = 0;
          }
            return prize;
      }

 

このように変数rankの値だけで処理を分岐させる場合はswitch文を採用することで打ち間違いのリスクを減らすことができます。
if文で記載した場合以下のような打ち間違いがあってもコンパイルエラーにならないので、動作確認するまで打ち間違いに気づかなかったりします。

 
            if(rank == 1)
            {
                // 1位の賞金 100万円
                prize = 1000000;
            }
            else if(rank == 1)
            {
                // 2位の賞金 99万円
                prize = 990000;
            }
 

 

対してswitch文の場合は以下画像のようにコンパイルエラーとなりますので、ビルド時に気づくことができます。そのため、1つの変数の値だけで処理を分岐させる場合はswitchで記載する方が打ち間違いのリスクが減るのでおすすめです

 

まとめ

このようにswitch文を使用したほうが良い場合もありますので、これを機に使ってみてくださいませ。又、switichを使用することでソースコードの可読性も上がります。

switch(変数)を見ただけで変数の値で分岐していることが一目でわかります。

if文の場合は最後のif~else まで見ないと判断できません。

ですので、1つの変数の値で処理を分岐させる場合はswitch文を使用してみてください。