0からスタート!ゲーム開発ブログ

ゲーム開発に関する様々な記事を更新します

【Unityで始めるC#ゲーム開発】if文と異なる条件分岐 switch文について解説!

 プログラミングでは、さまざまな状況に対応できるようにコードを書く必要があります。 そのために、多くのプログラミング言語では制御文が提供されています。その一つが switch 文です。



switch 文とは


 switch文は、ある変数の値によって処理を分岐させるための制御文です。 一言で言うと、「選択肢に対応した行動を決定する」ような機能を提供します。


 あるお店でのメニュー選択を考えてみましょう。 注文したメニュー(例えば、ハンバーガー、フレンチフライ、シェイク)に対応して、店員さんはそれぞれ違う料理を作ります。 このメニューの選択と結果の料理のような関係が、switch文ととても似ています。



Switch文の基本的な書き方


 Switch文の基本的な書き方は以下の通りです。


switch (変数)
{
    case1:
        // 値1の時の処理
        break;

    case2:
        // 値2の時の処理
        break;

    default:
        // 上記以外の値の時の処理
        break;
}




 各キーワードの説明です。


 switch
   switch文を始めます。これに続けて括弧()内に、分岐の元となる変数を書きます。




 case
   変数が特定の値を持つ場合の処理を記述します。これに続けてコロン:を書き、その後に該当する値が変数に存在する場合の処理を記述します。
   たとえば、分岐に応じたメソッドの実行命令を記述します。




 break
   それぞれのcaseブロックの最後にはbreakを書きます。これは、そのブロックの処理が終わったらswitch文から出るためのキーワードです。メソッド自体を終了したい場合には return でも抜け出せます。




 default
   変数がどのcaseにも当てはまらない場合の処理を記述します。これはオプションで、必ずしも記述する必要はありません。




サンプルコード


 それでは先ほどの、お店でのメニュー選択を例に、switch 文を作成した場合のサンプルコードです。


string menu = "ハンバーガー";

switch (menu) {

    case "ハンバーガー":
        // ハンバーガーを作る処理
        break;

    case "フレンチフライ":
        // フレンチフライを作る処理
        break;

    case "シェイク":
        // シェイクを作る処理
        break;

    default:
        // それ以外のメニューの場合の処理
        break;
}


 このサンプルコードにおいて switch文は、レストランの注文システムを模しています。

 変数menuの値によって異なる処理を行いますので、処理を解説していきます。




string menu = "ハンバーガー";

上記の行では、string型の変数menuを定義し、その初期値を"ハンバーガー"に設定しています。 menuは、お客さんが注文したメニュー項目を保持します。




switch (menu) {


この行では、switch文が開始します。 switch文は、引数(ここではmenu)として渡された値に基づいてプログラムの制御を分岐します。




case "ハンバーガー":
    // ハンバーガーを作る処理
    break;


 caseキーワードは、switch文内の一つの分岐を表します。 ここでは、menuが"ハンバーガー"である場合に実行されるコードブロックを示しています。 このコメント部分では、具体的なハンバーガーを作る処理を実装する場所です。 例えば、特定のメソッドの呼び出し命令などを記述します。

 break;は、現在のcaseブロックから抜け出し、switch文全体を終了するためのキーワードです。

 それ以降のcaseブロック("フレンチフライ"と"シェイク")も同様の方法で機能します。

 いずれかの case に該当した場合、break によって switch 文の処理は終了し、それ以降の case は実行されません。 そのため、case 内の処理は、他の case と重複して処理が動かないことが保証されます。




default:
    // それ以外のメニューの場合の処理
    break;


 defaultブロックは、すべてのcaseブロックが該当しない場合に実行されるコードを表します。 つまり、menuが"ハンバーガー"、"フレンチフライ"、"シェイク"のいずれでもない場合に、このブロックが実行されます。

 このように switch 文を利用した処理を作成することで、読みやすい分岐処理を作成することが出来ます。




enumを活用したswitch文


 C#では、特定の範囲の値を持つ変数を定義するためにenum(列挙型)を使用することができます。 このenumとswitch文を組み合わせると、コードの可読性と安全性を高めることができます。

 例えば、先ほどのお店のメニューをenumとして定義し、それをswitch文で処理するケースを考えてみましょう。




// enumを定義します。
public enum Menu {
    ハンバーガー,
    フレンチフライ,
    シェイク
}

// enumを使用したswitch文
Menu menu = Menu.ハンバーガー;

switch (menu)
{
    case Menu.ハンバーガー:
        // ハンバーガーを作る処理
        break;

    case Menu.フレンチフライ:
        // フレンチフライを作る処理
        break;

    case Menu.シェイク:
        // シェイクを作る処理
        break;

    default:
        // それ以外のメニューの場合の処理
        break;
}


 enumでは 変数が取りうる値を明示的に示す(Menu.ハンバーガーや Menu.シェイク)ことができるため、他の開発者(または未来の自分)がコードを読むときに理解しやすくなります。 また、変数が取りうる値を制限することができるため、無効な値が割り当てられることを防ぐことができるためです。

 このため、case での分岐条件を文字列で記述した場合とは異なり、メニューの名前を間違えることなく、明確にそれぞれの選択肢に対する処理を定義することができます。

 このように switch 文の分岐条件に enumを使用すると、コードの可読性が向上し、安全に処理を記述出来るようになります。



まとめ


 switch 文は、多岐にわたる条件分岐を実現するための制御文の一つです。 特に、ある変数の値によって、異なる処理を行いたい場合に便利です。

 if-else文でも同じようなことは可能ですが、条件が多くなると可読性が下がるため、そのような場合にはSwitch文を使用すると効果的です。

 色々な記法を知っておき、使いこなすスキルを身につけていくことで、プログラムの実装力が向上します

 ネットの記事や書籍などを元に学習する場合も、書かれているものをそのまま書き写すだけではなくて、 自分で読み返したときに読みやすいか、という部分も考えて学習するようにしていくと、プログラムへの読解力が増します。