Menu
CoddyTech

リテラル型

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を置き換える方法でもあります。これは後の章で説明します。

challenge icon

チャレンジ

簡単

4 つの方向名だけを正確に許可します。

  1. type Direction = "north" | "south" | "east" | "west" と記述します。
  2. local function movePlayer(direction: Direction): string を記述し、`Moving {direction}` を返します。
  3. 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オンラインコンパイラ