Menu
Coddy logo textTech

Tipos Literais

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 33 de 73.

Tipos como string permitem qualquer string, mas às vezes apenas alguns valores exatos fazem sentido. Um tipo literal usa o próprio valor como tipo:

local mode: "dark" = "dark"   -- apenas a string "dark" é permitida
local locked: true = true      -- apenas o booleano true é permitido

Por si sós, tipos de valor único são uma curiosidade. Combinados com unions, eles se tornam uma das ferramentas mais úteis do Luau: um conjunto estritamente controlado de valores allowed:

type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"

local move: Direction = "north"     -- ✓
local state: GameState = "playing"  -- ✓
-- local bad: Direction = "diagonal" -- ✗ erro de tipo!

Agora, um erro de digitação como "nort" ou um valor inválido como "diagonal" é detectado enquanto você edita; com uma string simples, ele passaria sem problemas e causaria uma falha em tempo de execução, se você tiver sorte o bastante para perceber.

Tipos literal diferenciam maiúsculas de minúsculas e são exatos: "North" não corresponde a "north". Literais de string são o caso mais comum, mas literais boolean e, nas versões mais recentes do Luau, literais numéricos funcionam da mesma forma. Esse padrão, uma união de literais de string, também é como o Luau substitui os enums de outras linguagens, como você verá em um capítulo posterior.

challenge icon

Desafio

Fácil

Crie três aliases de tipo de união literal:

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

Declare, usando os aliases:

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

Crie uma função movePlayer(direction: Direction): string que retorne "Moving [direction]" e uma função updateGameState(state: GameState): string que retorne "Game state: [state]".

Imprima, cada um em sua própria linha:

  1. movePlayer(playerDirection)
  2. updateGameState(currentState)
  3. o valor de selectedDifficulty

Experimente você mesmo

-- Escreva o código aqui
-- tipar Direction / GameState / Difficulty como uniões literais
-- declarar playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- imprima os três resultados
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Introdução ao Luau

Pratique por conta própria: Compilador de Lua online