ユニオン型としての文字列Enum
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 53/73。
数値は暗号のようなログになります。2 を見てもほとんど分かりませんが、"down" を見ればすべてが分かります。読みやすい enum(列挙型)を作成するには、Luau のリテラルユニオン型(特定の文字列そのものをメンバーとする型)が最適なツールです。
type Direction = "up" | "down" | "left" | "right"
local facing: Direction = "up" -- ✓
local typo: Direction = "upp" -- ✗ 編集時に型エラーが発生Direction で型注釈(annotated)された変数は、これら four つの文字列を保持でき、それ以外のものは一切保持できません。スペルを間違えるとチェッカーが即座に検出するため、バグが player に届くことはありません。
実行時(runtime)において、これらの値は普通の文字列(plain strings)です。print したり、結合したり、== で比較したりと、文字列に関して知っているすべての知識がそのまま適用されます。
print(facing) -- 上
print(`facing {facing}`) -- 上向きこれで手に入れた2つのパターンを比較してみましょう。定数テーブルはメンバーを保持する1つの実行時値(UserRole)を作成しますが、リテラルユニオンは値を一切作成しません。Direction テーブルは存在せず、どの文字列が適合するかについてチェッカーが適用するルールがあるだけです。実行時コストゼロで説明的かつ自己記録的な値を提供できるため、リテラルユニオンは Luau コードにおける標準的な enum スタイルとなっています。
チャレンジ
簡単メンバー "up"、"down"、"left"、"right" を持つ Direction という名前の literal union type を作成してください。
それぞれ Direction で型注釈された 4 つの variables を作成します:
upDirection="up"downDirection="down"leftDirection="left"rightDirection="right"
それぞれを独自の行に出力してください:
upDirectiondownDirectionleftDirectionrightDirectionleftDirectionから string interpolation を使用して作成された messageThe player moves left
自分で試してみよう
-- ここにコードを書いてください
-- 1) Direction型を4つの文字列リテラルのユニオンとして定義する
-- 2) 注釈付きの4つの変数を作成する
-- 3) それぞれを出力し、次に補間されたメッセージを出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数8Enum、Luau流のアプローチ
LuauにおけるEnumパターンテーブルによる数値Enumユニオン型としての文字列EnumリテラルユニオンEnumの活用定数テーブルのフリーズまとめ:Enum、Luau流のアプローチ