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) -- 2Este 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 tipoLa 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.
Desafío
FácilPrueba ambos patrones de enumeración uno al lado del otro.
- Crea la tabla de constantes
local Speed = {Slow = 8, Fast = 24}. - Escribe
type Pace = "slow" | "fast"y declaralocal pace: Pace = "fast". - Imprime
Speed.Fasty despuéspace.
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
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajar con funciones
Tipado de parámetros y valores de retornoTipado de funciones anónimasFunciones que no devuelven nadaParámetros opcionalesValores predeterminados de parámetrosValores predeterminados para booleanosFunciones variádicasDefinir tipos de funcionesRepaso: funciones tipadas7Proyecto: Gestor de tareas tipado
Proyecto: La estructura de una tareaFunción para añadir una tarea2Tipos fundamentales
Número, cadena y booleanoEl tipo 'any': una salida de emergenciaEl tipo 'unknown'Tipos nulos y opcionalesLa inferencia de tipos en acciónAnotaciones de tipo explícitasRepaso: práctica de tipos fundamentales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos8Enums al estilo de Luau
El patrón Enum en LuauEnums numéricos con tablasEnums de cadena como unionesUso de uniones literales como EnumsCongelación de tablas constantesRecapitulación: Enums al estilo de Luau3Tablas tipadas: arrays y mapas
Arrays tipadosAgregar y leer elementos¿Qué es un tipo mapa?Declarar y acceder a mapasRecorrer tablasTablas de formas mixtasLeer una cuadrículaConstruir una cuadrículatable.unpackRepaso: arrays y mapasPractica por tu cuenta: Compilador de Luau online