[第15回] 列挙型(Enum)の使い方を学ぶ|Unityで学ぶC#入門


「Unityで学ぶC#入門」の連載第14回は「抽象クラス(abstract)の使い方を学ぶ」でした。

第15回の今回は列挙型(Enum)の使い方を学びます。

列挙型を扱えるようになるとシンプルかつわかりやすいプログラムを記述できるようになります。

使い方が簡単な割に効果は絶大ですのでぜひご参考ください。

列挙型とは

列挙型とは、名前付きの固有の定数で構成される型のことで、簡単にいうとグループ化された定数のことです。

よく列挙型を説明するときに用いられる例が曜日です。

曜日は日〜土までの7つの定数で構成されています。曜日を扱う変数を「day」としたとすると、この変数に入る可能性がある文字列もしくは数字はどのようなものが考えられるでしょうか。この変数dayに日曜日の情報を持たせたいと考えたときを例に考えてみましょう。

変数day

「Sun」と格納するかもしれませんし、一方では「日」と日本語で格納するかもしれません。

変数dayを条件にして処理をさせたいときに、これでは困ってしまいます。if文の条件を「Sun」にするべきか「日」にするべきなのか毎回悩んでいたらキリがありません。そこで登場するのが列挙型です。

列挙型変数day

あらかじめ曜日をまとめた列挙型「Day」を準備します。

これによって変数dayに入ることのできる値をSun~Satの形に限定することができます。

if文での比較もDay型で比較することができるので大変便利です。

列挙型(Enum)の使い方(RPG編)

列挙型(Enum)の使い方をRPGの職業を例に学んでいきましょう。

列挙型のJobを作成して、各プレーヤーが名前と職業の情報を持っているという状況を作成していきます。

イメージは以下の通りです。

Enum職業

まずは職業の情報をまとめた列挙型変数を持つクラス「Job.cs」を作成します。

列挙型を一つのファイルとしてまとめておくことでほかのクラスに影響を及ぼさずに列挙型を使用することができます。

これで列挙型のJobを作成することができました。

列挙型は「class」の代わりに「enum」とすることで作成することができます。

次にJobの情報をもつクラス「Person.cs」を作成します。

これで名前と職業をもつPersonを作成することができます。

列挙型は「列挙型 変数名」で作成することができるのでとても簡単に使用することができます。

最後に例に挙げたキャラクターを作成する「GameController.cs」を作成します。

これで4人のキャラクターを生み出すことができます。

任意のオブジェクトにGameController.csをアタッチして実行してみましょう。

Enum実行例
実行結果

この例を用いて列挙型の特徴をみていきましょう。

enumでは定義した値以外を使用することができません

Enumの特徴

クラスPersonのもつ変数jobに列挙型に登録されていない職業を入れるとどうなるのでしょうか。

上記のようにJobに存在しない職業「Programmer」をPersonのコンストラクタに投げると以下のようなエラーが発生します。

RPGの世界に存在しない職業「Programmer」を持つキャラクターのインスタンスを生成することができません。

これによって想定外の値が入力されることを防ぐことができます。

また、クラスPersonのなかで使用しているようにSwitch文を使用することで分岐をシンプルかつわかりやすく記述することができます。

さらに、列挙型Jobの中身が変更されるとクラスPersonでエラーが発生するのですぐに対応することができ、保守性も上がります。

列挙型のそのほかの使用方法

列挙型は数値で管理することもできます。以下のようにプログラムを書き換えてみましょう。

Enum職業分類
実行結果

以上のように数値を定義することもできるので、列挙型の中でも分類をすることができるという特徴を持っています。

また、列挙型の値をそのまま文字列として出力することもできます。

クラスPersonを以下のように書き換えてみましょう。

Enum実行結果その2
実行結果

「ToString()」を利用することでenumで登録した文字列をそのまま使用することができます。

まとめ

いかがでしたでしょうか。

今回は列挙型について学んできました。

使用方法が簡単な割に効果が大きいことがおわかりいただけだでしょうか。

列挙型を使いこなしてシンプルかつわかりやすいプログラムを書いてUnity&C#ライフを充実させていきましょう!

 

他の回の記事について気になる方はこちらをクリック

 

そのほかの参考記事)enum (C# リファレンス)(Microsoft公式)


Enumの特徴

この記事はいかがでしたか?よければシェアをお願いします。

Furui