Menu
CoddyTech

ユニオン型としての文字列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コードで定番の列挙型スタイルです。

challenge icon

チャレンジ

簡単

4つの名前のうち、いずれか1つだけを取る方向を保存します。

  1. type Direction = "up" | "down" | "left" | "right"と書きます。
  2. local facing: Direction = "left"を宣言します。
  3. facingを出力し、次に`The player moves {facing}`を出力します。

コードを実行を押すと、出力にleftとThe player moves leftが表示されます。

自分で試してみよう

-- 1) Directionを4つの文字列のユニオン型として定義する
-- 2) local facing: Direction = "left"
-- 3) facingを出力し、次に文を出力する

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

自分で練習してみよう: Luauオンラインコンパイラ