Menu
CoddyTech

LuauにおけるEnumパターン

CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 55/80。

プログラムには、少数の固定された値の集合から選ばれる値が数多くあります。注文の状態は保留中、発送済み、配達済みのいずれかであり、プレイヤーの向きは上、下、左、右のいずれかです。多くの言語には、このためのenumキーワードがあります。Luauにはありませんが、すでに使える2つの機能でこの役割を果たせるため、必要ありません。

パターン1:定数テーブル。通常のテーブルで意味のある名前を値に対応付け、コードのあちこちに散らばる「マジックナンバー」を置き換えます。

local Status = {
    Pending = 1,
    Active = 2,
    Done = 3,
}

print(Status.Active) -- 2

これは実行時に存在する値です。これまで使ってきたテーブルと同じように、Status.Activeを読み取ったり、それと比較したり、渡したりできます。

パターン2:リテラル共用体。共用体の章で学んだリテラル型を使って、正確な文字列値からなる型を作ります。

type Color = "red" | "green" | "blue"
local favorite: Color = "green" -- ✓
local oops: Color = "yellow"    -- ✗ 型エラー

共用体は型チェッカーにのみ存在するため、実行時のコストはゼロですが、変数に集合外の値を保持できないことを保証します。この2つのパターンは互いを補完します。テーブルは1つの名前のもとで実行時の値を提供し、共用体はコンパイル時の保証を提供します。この章の後半では、定数テーブルが実行時に変更されるのを防ぐtable.freezeについても学びます。

challenge icon

チャレンジ

簡単

両方の列挙型パターンを並べて試してみましょう。

  1. 定数テーブル local Speed = {Slow = 8, Fast = 24} を作成します。
  2. type Pace = "slow" | "fast" と記述し、local pace: Pace = "fast" を宣言します。
  3. Speed.Fast を出力し、次に pace を出力します。

コードを実行を押すと、出力に 24 と fast が表示されます。

自分で試してみよう

-- 1) Slow = 8、Fast = 24 を持つ定数テーブル Speed
-- 2) type Pace = "slow" | "fast" を定義し、次に local pace: Pace = "fast" を定義する
-- 3) Speed.Fast を出力し、次に pace を出力する

Luau入門のすべてのレッスン

自分で練習してみよう: Luauオンラインコンパイラ