リテラル型
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 33/73。
string のような型は任意の文字列を許可しますが、場合によっては、意味を持つのは少数の正確な値だけです。リテラル型は、値そのものを型として使用します:
local mode: "dark" = "dark" -- 文字列 "dark" のみが許可されています
local locked: true = true -- ブール値 true のみが許可されています単独では、単一値の型は珍しい機能にすぎません。unions と組み合わせると、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 のバージョンでは)number リテラルも同じように機能します。この、文字列リテラルの union というパターンは、他の言語における enum の代わりに Luau が使用する仕組みでもあります。これは後の章で説明します。
チャレンジ
簡単3つのリテラルユニオン型エイリアスを作成します:
Direction="north" | "south" | "east" | "west"GameState="menu" | "playing" | "paused" | "gameover"Difficulty="easy" | "medium" | "hard"
エイリアスを使用して宣言します:
playerDirection: Direction="north"currentState: GameState="playing"selectedDifficulty: Difficulty="medium"
movePlayer(direction: Direction): string という function を作成して "Moving [direction]" を返し、updateGameState(state: GameState): string という function を作成して "Game state: [state]" を返します。
それぞれを独立した行に出力します:
movePlayer(playerDirection)updateGameState(currentState)selectedDifficultyの値
自分で試してみよう
-- ここにコードを書いてください
-- Direction / GameState / Difficulty をリテラルユニオンとして型付けする
-- playerDirection、currentState、selectedDifficulty を宣言する
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- 3つの結果を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ