Menu
CoddyTech

El patrón Enum en Luau

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 55 de 80.

Los programas están llenos de valores extraídos de un conjunto pequeño y fijo: un pedido está pendiente, enviado o entregado; un jugador está orientado hacia arriba, hacia abajo, hacia la izquierda o hacia la derecha. Muchos lenguajes tienen una palabra clave enum para esto. Luau no la tiene, y no la necesita, porque dos herramientas que ya tienes cubren esa función.

Patrón 1: la tabla de constantes. Una tabla simple asigna valores a nombres significativos y reemplaza los «números mágicos» dispersos por el código:

local Status = {
    Pending = 1,
    Active = 2,
    Done = 3,
}

print(Status.Active) -- 2

Este es un valor real en tiempo de ejecución: puedes leer Status.Active, compararlo y pasarlo de un lado a otro, igual que las tablas que has usado hasta ahora.

Patrón 2: la unión de literales. Un tipo compuesto por valores de cadena exactos, usando los tipos literales que viste en el capítulo sobre uniones:

type Color = "red" | "green" | "blue"
local favorite: Color = "green" -- ✓
local oops: Color = "yellow"    -- ✗ error de tipo

La unión existe solo para el verificador y no tiene ningún costo en tiempo de ejecución, pero garantiza que una variable no pueda contener ningún valor fuera del conjunto. Los dos patrones se complementan: la tabla te proporciona valores en tiempo de ejecución bajo un mismo nombre; la unión te proporciona una garantía en tiempo de compilación. Más adelante en este capítulo también conocerás table.freeze, que protege una tabla de constantes para que no se modifique en tiempo de ejecución.

challenge icon

Desafío

Fácil

Prueba ambos patrones de enumeración uno al lado del otro.

  1. Crea la tabla de constantes local Speed = {Slow = 8, Fast = 24}.
  2. Escribe type Pace = "slow" | "fast" y declara local pace: Pace = "fast".
  3. Imprime Speed.Fast y después pace.

Pulsa Ejecutar código: la salida muestra 24 y fast.

Pruébalo tú mismo

-- 1) una tabla constante Speed con Slow = 8, Fast = 24
-- 2) tipo Pace = "slow" | "fast", luego local pace: Pace = "fast"
-- 3) imprime Speed.Fast, luego pace

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Luau online