Menu
Coddy logo textTech

リテラル型

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

string のような型は任意の文字列を許可しますが、時にはいくつかの正確な値のみが意味を持つ場合があります。リテラル型(literal type)は、値そのものを型として使用します:

local mode: "dark" = "dark"   -- 文字列 "dark" のみが許可されています
local locked: true = true      -- ブール値 true のみが許可されています

単一の値の型だけでは、単なる興味深い機能に過ぎません。しかし、ユニオン型(unions)と組み合わせることで、許可される値のセットを厳格に制御する Luau の最も有用なツールの 1 つになります:

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

チャレンジ

簡単

3つのリテラルユニオン型エイリアスを作成します:

  • Direction = "north" | "south" | "east" | "west"
  • GameState = "menu" | "playing" | "paused" | "gameover"
  • Difficulty = "easy" | "medium" | "hard"

作成したエイリアスを使用して、以下を宣言します:

  • playerDirection: Direction = "north"
  • currentState: GameState = "playing"
  • selectedDifficulty: Difficulty = "medium"

"Moving [direction]" を返す関数 movePlayer(direction: Direction): string と、"Game state: [state]" を返す関数 updateGameState(state: GameState): string を作成します。

以下をそれぞれ新しい行に出力します:

  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入門のすべてのレッスン