プログラムを組んでいく上で、可読性を維持するために定数は欠かせません!
そんな定数を列挙して作成出来る、enumについて今回は見ていきましょう。
enumをちゃんと利用すれば、プログラムが綺麗になること請け合いですよ!
ぜひ利用していない初心者は、これを機にに扱えるようになってください。
【前知識】そもそも定数とは?
※定数がわかる人「enumとは?」へおすすみください。
わからない人向けに説明しますと「変更しない一定の値」のことです。
プログラムでは、これを「変更できない変数」とし保持しておこことができます。
例えばゲームを作る際、ゲーム内のスコアの限界値が9999だったとしましょう。
その時、限界値を超えないようにするプログラムを組んだ場合、以下のように対策を行ったとします。
// 最大値を超えていたら if (9999 < score){ score = 9999; // 最大値で上書き }
上記プログラムには二つ問題があります。
・「9999」の数字が何なのかわかりづらい
・もし開発中に上限値を変えたくなったら「9999」とかいた場所全てを直す必要がある
このような直接数字を書くようなプログラムは、あまり美しくありませんよね…
そんな時は、以下のように定数を準備の準備を行いましょう!
const int MAX_SCORE = 9999; // スコアの最大値
そして、それを利用するようにすれば、プログラムがとてもすっきりしたように見えませんか?
if (MAX_SCORE < score){ // 最大値を超えていたら score = MAX_SCORE; // 最大値で上書き }
また開発中に上限を変えたくなった時でも、一箇所プログラムを修正すれば対応ができますね!
このように対数はとても有用な仕組みです!
enumとは?
そして今回の主役enumに入っていきましょう。
enumとは「複数の定数をひとつにまとめておくことができる型」のことを指します。
また数字を指定していなくとも自動的に連番で数字を割り振り、列挙した数字の定数を作ってくれたりもします。
言葉だけではわからないと思うので、実例を見ていきましょう。
例えば「じゃんけん」をするゲームを作るとしましょう。
じゃんけんの手の型として「グー」「チョキ」「パー」がありますよね。
定数を使わなければ、型のIDを「1」「2」「3」と用意したり、文字列で判断することになったりとプログラムが汚くなってしまうでしょう。
しかしenumを使えば、「じゃんけんの手の型」非常に簡単に定数にすることが可能です!
実際に次の項目で使ってみましょう!
enumを使ってみよう!
では早速定義しましょう。
定義してみよう!
例えば「JankenManager」というスクリプトの中で、ジャンケンの手の型を「JANKEN_TYPE」として定義する場合以下の通りです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class JankenManager : MonoBehaviour { // ジャンケンの手の型の列挙型 public enum JANKEN_TYPE { GUU, // グー CHOKI, // チョキ PAA, // パー } }
非常にシンプルですね!
public enum JANKEN_TYPE
この部分でenum型の名前を記述しています。
{ GUU, // グー CHOKI, // チョキ PAA, // パー }
続きのこの部分で「JANKEN_TYPE列挙型」の、中身を定義しています。
使用してみよう!
では、先ほど定義した型の使いかたを見てみましょうか。
以下のようなプログラムを組んでみます。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class JankenManager : MonoBehaviour { // ジャンケンの手の型の列挙型 public enum JANKEN_TYPE { GUU, // グー CHOKI, // チョキ PAA, // パー } // 初期化関数 void Start() { // 型の変数作成 JANKEN_TYPE type = JANKEN_TYPE.PAA; // ログとして表示してみる Debug.Log(type); } }
「初期化関数」以下の部分を追加しただけですね!
結果は以下の通りです。
ちゃんと「PAA」がログに出ていますね!
このプログラムの大事な部分は、以下の部分です。
// 更新関数 void Start() { // 型作成、そしてパーを代入している。 JANKEN_TYPE type = JANKEN_TYPE.PAA; // ログとして表示してみる Debug.Log(type); }
作ったenum型は変数として、定義することができます。
そして列挙型の中身は「JANKEN_TYPE.GUU」「JANKEN_TYPE.CHOKI」「JANKEN_TYPE.PAA」のような形で呼び出すことが可能です。
非常に簡単に使用できて良い感じですね!
Unityエディタ上ではどう見えるの?
最後にpublicなメンバ変数として、クラスに保持している場合Unityエディタ上でどう見てるかについて見てみましょう!
using System.Collections; using System.Collections.Generic; using UnityEngine; public class JankenManager : MonoBehaviour { // ジャンケンの手の型の列挙型 public enum JANKEN_TYPE { GUU, // グー CHOKI, // チョキ PAA, // パー } // ジャンケンの手の型の列挙型の変数 public JANKEN_TYPE janken_type; }
このプログラムを準備し、保存した後でUnity上のInspectorウィンドウを確認すると…
画像のようなボックスが増えており…
定数の中から初期値を選択することが可能です!
これもなかなか便利ですね!
もっと詳細を知りたい人はこちら!
また今回はざっくり使い方と有用性の説明をしました。
もっと詳しく学びたい人は、以下の記事に詳しくまとめてあります。
余力のある人や使った際に疑問が生まれた人は、ぜひ読んでみてください!
まとめ
プログラム綺麗にすることは、保守性や可読性を維持するために重要なことです。
定数や今回学んだ列挙型を使って、綺麗なプログラムを目指しましょう!