Menu
Coddy logo textTech

ユニオン型としての文字列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 スタイルとなっています。

challenge icon

チャレンジ

簡単

メンバー "up""down""left""right" を持つ Direction という名前の literal union type を作成してください。

それぞれ Direction で型注釈された 4 つの variables を作成します:

  • upDirection = "up"
  • downDirection = "down"
  • leftDirection = "left"
  • rightDirection = "right"

それぞれを独自の行に出力してください:

  1. upDirection
  2. downDirection
  3. leftDirection
  4. rightDirection
  5. leftDirection から string interpolation を使用して作成された message The player moves left

自分で試してみよう

-- ここにコードを書いてください
-- 1) Direction型を4つの文字列リテラルのユニオンとして定義する
-- 2) 注釈付きの4つの変数を作成する
-- 3) それぞれを出力し、次に補間されたメッセージを出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

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