LuauにおけるEnumパターン
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 51/73。
プログラムは、小規模で固定されたセットから取得される値であふれています。注文が pending、shipped、あるいは delivered である場合や、プレイヤーが up、down、left、または right を向いている場合などです。多くの言語にはこれのための 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" -- ✗ type errorこのユニオンはチェッカーのためだけに存在し(実行時のコストはゼロ)、変数がセット外の値を持たないことを保証します。2つのパターンは互いに補完し合います。テーブルは単一の名前の下で実行時値を提供し、ユニオンはコンパイル時の保証を提供します。この章の後半では、定数テーブルが実行時に変更されるのを防ぐ table.freeze についても学びます。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数8Enum、Luau流のアプローチ
LuauにおけるEnumパターンテーブルによる数値Enumユニオン型としての文字列EnumリテラルユニオンEnumの活用定数テーブルのフリーズまとめ:Enum、Luau流のアプローチ