Menu
Coddy logo textTech

リテラル型

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 が使用する仕組みでもあります。これは後の章で説明します。

challenge icon

チャレンジ

簡単

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]" を返します。

それぞれを独立した行に出力します:

  1. movePlayer(playerDirection)
  2. updateGameState(currentState)
  3. selectedDifficulty の値

自分で試してみよう

-- ここにコードを書いてください
-- Direction / GameState / Difficulty をリテラルユニオンとして型付けする
-- playerDirection、currentState、selectedDifficulty を宣言する
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- 3つの結果を出力する
quiz icon腕試し

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

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

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