Tsuの雑記¯\_(ツ)_/¯

主に製作メモ・備忘録として使用。製作したアプリのリンクもあります。

【Unity】複数回使用する文字列は変数に代入しておく【C#】

複数回使用する文字列は,変数に代入しておきましょう。

こうすることで,タイプミスに気付かず放置してしまう等のリスクを減らせます。

以下,実例を挙げて御説明いたします。

(Unity 2018.3.0f2)

文字列がswanならwhitecrowならblackと返すプログラムを作ります。

文字列を変数に代入しない場合と,代入する場合を比べてみましょう。

文字列を変数に代入しない場合

void Start()
{
    Color("swan");
    Color("crow");
}

void Color(string bird)
{
    // 次の行の文字列に注目
    if (bird == "swam") {
        Debug.Log("white");
    }
    else
    {
        Debug.Log("black");
    }
}

このコードを実行すると,ログには2回ともblackと出てしまいます。

デバッグログに2回とも "black" と表示されている画像
UnityEditorのConsole画面

なにが問題なのでしょうか。

原因は,swanとすべき所が swamとなっている事です。

単純なタイプミスですね。

文字列のミスは警告が出ないため,間違えたまま放置すると大変な事になってしまいます。

そこで,あらかじめ文字列の要素を変数に代入しておきましょう。

文字列を変数に代入した場合

// あらかじめ文字列を定義
string swan = "swan";
string crow = "crow";

void Start()
{
    Color(swan);
    Color(crow);
}

void Color(string bird)
{
    // タイプミスすれば警告が出る
    if (bird == swam) {
        Debug.Log("white");
    }
    else
    {
        Debug.Log("black");
    }
}

こうすることで,エラーの原因となる文字列の入力を減らせます。

更に先程と同様のタイプミスがあったとしても,今度は変数であるため警告が出ます。

IDEでエラーが検出されている画像
IDEにてエラー検出

手間は増えるものの,より堅実な方法ではないでしょうか。

補足

例として挙げたような条件分岐には,文字列よりも処理が早い方法があります。

詳しくは以下の記事を御覧ください。

tsu-games.hatenablog.com