Menu
CoddyTech

テーブルによる数値Enum

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

これが定数テーブルパターンの全体像です。PascalCaseのテーブル名を選び、各メンバーに明示的な数値を割り当てれば、それ以降、コードでは名前を使って表現できます。

local UserRole = {
    Admin = 1,
    Editor = 2,
    Viewer = 3,
}

TypeScriptのenumとは異なり、数値が自動で割り当てられることはありません。すべての値を自分で選びます。1から始めるのはLuaの慣習に合っていますが、どんな方式でも使えます(200や404のようなHTTP風のコードでも問題ありません)。

メンバーは比較で役立ちます。ロールを受け取る関数では、単なる数値ではなく、名前付き定数を使って分岐できます。

local function checkPermissions(role: number)
    if role == UserRole.Admin then
        print("Full access granted")
    elseif role == UserRole.Editor then
        print("Edit access granted")
    else
        print("View access only")
    end
end

パラメーターの型がnumberである点に注目してください。テーブルパターンだけでは、使用できる数値を制限できません。この保証を実現するのが、次のレッスンで学ぶリテラル型のユニオンです。

challenge icon

チャレンジ

簡単

定数テーブルを使って、難易度を3段階で表しましょう。

  1. local Level = {Easy = 1, Normal = 2, Hard = 3}を作成します。
  2. local function describeLevel(level: number): stringを記述し、Level.Easyの場合は"Relaxed"、Level.Normalの場合は"Standard"、それ以外の場合は"Brutal"を返します。
  3. Level.Hard、続いてdescribeLevel(Level.Normal)を出力します。

Run Codeを押すと、出力に3とStandardが表示されます。

自分で試してみよう

-- 1) Level定数テーブル(Easy = 1, Normal = 2, Hard = 3)
-- 2) if/elseif/elseを使ったdescribeLevel(level: number): string
-- 3) Level.Hardを出力し、次にdescribeLevel(Level.Normal)を出力する

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

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