Menu
Coddy logo textTech

ユニオン型としての文字列Enum

CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 53/73。

数値は暗号のようなログを生みます。2 を見てもほとんど何も分かりませんが、"down" を見ればすべて分かります。読みやすい enum には、Luau の literal union types が適しています。メンバーが正確な文字列である type です。

type Direction = "up" | "down" | "left" | "right"

local facing: Direction = "up"    -- ✓
local typo: Direction = "upp"     -- ✗ 編集中の型エラー

Direction で annotated された変数には、これら four つの strings のいずれかだけを格納でき、それ以外は格納できません。1 文字でも入力を間違えると、checker がすぐに検出します。bug が player に届くことはありません。

runtime では、値は plain strings です。これらを print したり、連結したり、== で比較したりできます。strings について知っていることはすべて当てはまります。

print(facing)            -- 上
print(`facing {facing}`) -- 上向き

ここまでに登場した 2 つのパターンを比較してみましょう。constant table は members を保持する 1 つの runtime value(UserRole)を作成します。一方、literal union は value をまったく作成しません。Direction table は存在せず、どの strings が適合するかについて checker が適用する rule だけが存在します。説明的で自己文書化された values を、runtime コストなしで使えるため、literal unions は Luau code における定番の enum スタイルです。

challenge icon

チャレンジ

簡単

Direction という名前のリテラルユニオン型を作成し、メンバーとして "up""down""left""right" を指定してください。

それぞれに Direction の型注釈を付けた4つの変数を作成してください:

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

次の内容を、それぞれ別の行に出力してください:

  1. upDirection
  2. downDirection
  3. leftDirection
  4. rightDirection
  5. leftDirection から文字列補間を使って作成したメッセージ The player moves left

自分で試してみよう

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

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

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

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