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つのパターンは互いを補完します。テーブルは1つの名前の下で実行時の値を提供し、ユニオンはコンパイル時の保証を提供します。この章の後半では、定数テーブルが実行時に変更されないよう保護するtable.freezeについても学びます。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数8Enum、Luau流のアプローチ
LuauにおけるEnumパターンテーブルによる数値Enumユニオン型としての文字列EnumリテラルユニオンEnumの活用定数テーブルのフリーズまとめ:Enum、Luau流のアプローチ自分で練習してみよう: Luaオンラインコンパイラ