リテラル型
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 35/80。
stringのような型では任意の文字列を使えますが、意味を持つ値が厳密に限られる場合もあります。リテラル型では、値そのものを型として使います。
local mode: "dark" = "dark" -- 文字列 "dark" のみが許可されます
local locked: true = true -- 真偽値 true のみが許可されます単独では、単一の値だけを持つ型は珍しいものにすぎません。しかし、共用体と組み合わせると、許可される値を厳密に制御できる、Luauで最も便利な機能の一つになります。
type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"
local move: Direction = "north" -- ✓
local state: GameState = "playing" -- ✓
-- local bad: Direction = "diagonal" -- ✗ 型エラー!"nort"のようなタイプミスや、"diagonal"のような無効な値は、編集中に検出されます。通常のstring型ではそのまま通って実行時に問題を起こしますが、運よく気づければの話です。
リテラル型では大文字と小文字が区別され、値は完全に一致する必要があります。"North"は"north"と一致しません。文字列リテラルがよく使われますが、booleanや(新しいバージョンのLuauでは)数値リテラルも同じように機能します。このように文字列リテラルを共用体にする方法は、Luauで他の言語のenumを置き換える方法でもあります。これは後の章で説明します。
チャレンジ
簡単4 つの方向名だけを正確に許可します。
type Direction = "north" | "south" | "east" | "west"と記述します。local function movePlayer(direction: Direction): stringを記述し、`Moving {direction}`を返します。local playerDirection: Direction = "east"を宣言し、movePlayer(playerDirection)を出力します。
コードを実行を押すと、出力に Moving east が表示されます。
自分で試してみよう
-- 1) type Direction = "north" | "south" | "east" | "west"
-- 2) movePlayer(direction: Direction): string
-- 3) local playerDirection: Direction = "east" とし、移動を表示する
Luau入門のすべてのレッスン
自分で練習してみよう: Luauオンラインコンパイラ