Formas frente a tablas no estructuradas
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 40 de 73.
Ahora tienes dos formas de trabajar con tablas de registros: la forma flexible que siempre has usado en Lua y las formas declaradas. Vale la pena detenerse para ver qué aporta cada una.
Una tabla flexible acepta cualquier cosa. Esa flexibilidad tiene un precio: escribe mal un campo (user.nmae) y obtienes silenciosamente nil; olvida un campo y el error aparece mucho más adelante, en tiempo de ejecución, en el código que toque primero el hueco:
local user = {name = "Ana", age = 20}
print(user.nmae) -- tabla laxa: imprime nil silenciosamenteDeclara una forma y esos errores pasan del tiempo de ejecución al momento de editar. El comprobador señala el error tipográfico en cuanto lo escribes, tu editor puede autocompletar los nombres de los campos y la declaración type también sirve como documentación de lo que contiene la tabla:
type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ error de tipo: clave 'nmae' no encontrada en UserSi vienes de TypeScript, ten en cuenta que Luau no tiene la palabra clave interface: type gestiona todas las formas. Tampoco existe la «fusión de declaraciones»: declarar dos tipos con el mismo nombre en el mismo ámbito es un error, por lo que cada forma tiene exactamente una definición.
Las formas de Luau son estructurales: cualquier tabla con los campos correctos de los tipos correctos coincide, sin importar dónde ni cómo se haya creado. Y las tablas flexibles siguen teniendo su lugar: los scripts rápidos y los datos verdaderamente dinámicos no necesitan una forma declarada. Sin embargo, para cualquier cosa que se pase entre funciones, una forma detecta los errores cuando todavía es barato corregirlos.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
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
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 Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, 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 tipos3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y Maps6Definición de formas de tablas
Anotaciones de forma en líneaAlias de tipos para formasPropiedades opcionalesFormas frente a tablas no estructuradasExtensión de formasAñadir métodos a las formasEl parámetro 'self' y los métodos con dos puntosRecapitulación: Definición de formas de tablasPractica por tu cuenta: Compilador de Lua online