Unityでインディゲームを作る!

Unityでのゲーム制作を目指し、それに関わる話題についてのブログ

Unity 2021 LTS 祝リリース! C#8対応で可能になった新しいswitch式について

 Unity 2021LTS版がリリースされました。多くの新機能があるのですが、今回はUnityが、C#8.0に対応したことで可能となった、新しいswitchの書き方についてです。

 なお、文とは"statement"を指しますが、この新しい構文は厳密にはstatement(文)ではなく"式"となります。

 

 マイクロソフト公式が、C#8.0の新機能について解説しており、今回の記事はここを参照しています。

 

switch文と言えば...

switch(input){

    case Animal.Dog :

        Console.WriteLine("Inu");

        break;

    case Animal.Cat :

        Console.WriteLine("Neko");

        break;

    default:

        Console.WriteLine("Doubutsu");

        break;

}

 という風に、現在となっては少し古びた、コード全体が縦長になってしまうような構文でした。しかし、C#8.0からは、もっとスッキリとした書き方が可能です。

 

 以下の例は、C#のコンソールアプリケーションにおいて書かれたもので、Animalというenumを入力し、その日本語名をstringで返すswitch式を含むstatic関数となります。

NewSwitchStatement_enum

 

NewSwitchStatement

構文としては、

public return-Type FunctionName (input-Type input) =>

    input switch{

       input-case => return-value,

       ///////////////

       _                 => return-value

}; ←コロンが必要

 となります。swicth文の中で指定された以外の入力については、旧switch文ではdefaultとしてまとめていましたが、新switchでは_(アンダースコア)がそれに置き換わります。

 =>が使われているようにラムダ式のような感じで、慣れるまでは違和感を感じるかなぁとは思いますが、旧構文と比べて明らかに分かりやすいコードになるので、こっちを使っていきたいですね。