【れっきょがた】

列挙型(Enum) とは?

最終更新:
💡 選べる選択肢が決まった「自動販売機のボタン」
📌 このページのポイント
列挙型(enum):名前付き定数の集合 enum Color RED = 0 GREEN = 1 BLUE = 2 マジックナンバー(悪い例) if (color == 0) // 赤? if (color == 1) // 緑? 数字だけでは意味が不明… バグの温床になりやすい enumのメリット ✓ コードが読みやすい ✓ 入力ミスを防止 ✓ 値の範囲を制限
列挙型のイメージ
ひよこ ひよこ
普通の変数に文字列を入れるのとどう違うの?
ペンギン先生 ペンギン先生
status = "acitve" とタイプミスしても文字列なら気づかない。Enumなら Status.Active のように定義された選択肢しか使えないので、タイプミスはコンパイルエラーで即座にわかる。安全装置つきの選択肢リスト。
ひよこ ひよこ
JavaScriptにはEnumがないの?
ペンギン先生 ペンギン先生
JavaScript自体にはEnum構文がない。代わりに const STATUS = Object.freeze({ ACTIVE: "active", INACTIVE: "inactive" }) のようにオブジェクトで代用する。TypeScriptなら enum キーワードが使える。
ひよこ ひよこ
数値enumと文字列enumどっちがいい?
ペンギン先生 ペンギン先生
文字列enumのほうがおすすめ。デバッグ時にコンソールで "ACTIVE" と表示されたほうが 0 より意味がわかりやすい。数値enumは値を省略できて楽だけど、意図しない数値比較が起きるリスクがある。
ひよこ ひよこ
Enumに振る舞いを持たせることもできるの?
ペンギン先生 ペンギン先生
JavaKotlinではEnumにメソッドやフィールドを追加できるよ。たとえばHTTPステータスコードのEnumに「isSuccess()」メソッドを追加して、200番台かどうかを判定させるとか。ただしTypeScriptのenumにはメソッドを追加できないから、classで代用する場合もあるんだ。
ひよこ ひよこ
Enumの値が増えたらどう管理するの?
ペンギン先生 ペンギン先生
DBに保存している場合は要注意だよ。Enumの値を後から削除すると、古いデータとの不整合が起きる。だから「DEPRECATED_旧値」のように残しておく運用が安全。あと、switch文でEnumの全パターンをカバーしているか確認する「網羅性チェック」をコンパイラに任せると、値を追加したとき対応漏れを自動検知できるからおすすめだよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
Enumって出てきたら「選べる値をあらかじめ決めておく型」と思えばだいたいOK!
📖 おまけ:英語の意味
「enumeration」 = 列挙、一覧
💬 ラテン語の「enumerare(数え上げる)」が語源で、値を一つずつ列挙することから
← 用語集にもどる