Menu
Coddy logo textTech

Tipos literales

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 33 de 73.

Los tipos como string permiten cualquier cadena, pero a veces solo tienen sentido unos pocos valores exactos. Un tipo literal usa el propio valor como tipo:

local mode: "dark" = "dark"   -- solo se permite la cadena "dark"
local locked: true = true      -- solo se permite el booleano true

Por sí solos, los tipos de un solo valor son una curiosidad. Combinados con uniones, se convierten en una de las herramientas más útiles de Luau: un conjunto estrictamente controlado de valores permitidos:

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

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

Ahora, un error tipográfico como "nort" o un valor no válido como "diagonal" se detecta mientras editas; con una string simple, pasaría sin problemas y provocaría un error en tiempo de ejecución, si tienes la suerte de darte cuenta.

Los tipos literales distinguen entre mayúsculas y minúsculas y deben coincidir exactamente: "North" no coincide con "north". Los literales de cadena son el caso más común, pero los literales booleanos y, en las versiones más recientes de Luau, los literales numéricos funcionan de la misma manera. Este patrón, una unión de literales de cadena, también es la forma en que Luau reemplaza las enumeraciones de otros lenguajes, como verás en un capítulo posterior.

challenge icon

Desafío

Fácil

Crea tres alias de tipo unión de literales:

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

Declara, usando los alias:

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

Crea una función movePlayer(direction: Direction): string que devuelva "Moving [direction]", y una función updateGameState(state: GameState): string que devuelva "Game state: [state]".

Imprime, cada uno en su propia línea:

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

Pruébalo tú mismo

-- Escribe código aquí
-- type Direction / GameState / Difficulty como uniones literales
-- declara playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- imprime los tres resultados
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Lua online