Menu
Coddy logo textTech

テーブルによる数値Enum

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

定数テーブルパターンを正しく構築してみましょう。PascalCaseのテーブル名を選択し、各メンバーに明示的な数値を割り当てます。それ以降、コードは名前を使って記述できるようになります:

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

TypeScriptの enum とは異なり、自動的に番号が割り振られることはありません — すべての値を自分で選択します1 から始めるのはLuaの規則によく合いますが、どんな構成でも動作します(200404 のような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つのメンバーを持つUserRoleという名前の定数テーブルを作成します:

  • Admin = 1
  • Editor = 2
  • Viewer = 3

role: numberを受け取り、以下を出力する関数checkPermissionsを作成します:

  • roleがUserRole.Adminの場合はFull access granted
  • roleがUserRole.Editorの場合はEdit access granted
  • それ以外の場合はView access only

次に、順番に以下を実行します:

  1. UserRole.Adminを出力する
  2. UserRole.Editorを出力する
  3. UserRole.Viewerを出力する
  4. checkPermissions(UserRole.Admin)を呼び出す
  5. checkPermissions(UserRole.Editor)を呼び出す
  6. checkPermissions(UserRole.Viewer)を呼び出す

自分で試してみよう

-- ここにコードを書く
-- 1) UserRole定数テーブルを作成する (Admin=1, Editor=2, Viewer=3)
-- 2) if/elseif/elseを使ってcheckPermissions(role: number)を書く
-- 3) 3つのメンバーを出力し、それぞれに対して関数を呼び出す
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

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