ユニオン型としての文字列Enum
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 57/80。
数値はログを分かりにくくします。2を見てもほとんど何も分かりませんが、"down"を見ればすべて分かります。読みやすい列挙型には、Luauのリテラル共用体型が便利です。メンバーが正確な文字列である型です。
type Direction = "up" | "down" | "left" | "right"
local facing: Direction = "up" -- ✓
local typo: Direction = "upp" -- ✗ 編集中の型エラーDirectionの型注釈が付いた変数には、この4つの文字列だけを格納でき、それ以外は格納できません。1文字でも間違えると、型チェッカーがすぐに検出するため、バグがプレイヤーに届くことはありません。
実行時の値は通常の文字列です。出力したり、連結したり、==で比較したりできます。文字列について知っていることはすべて当てはまります。
print(facing) -- 上
print(`facing {facing}`) -- facing 上ここまでに学んだ2つのパターンを比べてみましょう。定数テーブルは、メンバーを保持する1つの実行時値(UserRole)を作成します。一方、リテラル共用体は値をまったく作成しません。Directionテーブルは存在せず、どの文字列が適合するかを型チェッカーが強制するルールがあるだけです。実行時のコストがゼロで、説明的かつ自己文書化された値を使えるため、リテラル共用体はLuauコードで定番の列挙型スタイルです。
チャレンジ
簡単4つの名前のうち、いずれか1つだけを取る方向を保存します。
type Direction = "up" | "down" | "left" | "right"と書きます。local facing: Direction = "left"を宣言します。facingを出力し、次に`The player moves {facing}`を出力します。
コードを実行を押すと、出力にleftとThe player moves leftが表示されます。
自分で試してみよう
-- 1) Directionを4つの文字列のユニオン型として定義する
-- 2) local facing: Direction = "left"
-- 3) facingを出力し、次に文を出力する
Luau入門のすべてのレッスン
8Enum、Luau流のアプローチ
LuauにおけるEnumパターンテーブルによる数値Enumユニオン型としての文字列EnumリテラルユニオンEnumの活用定数テーブルのフリーズまとめ:Enum、Luau流のアプローチ自分で練習してみよう: Luauオンラインコンパイラ