Propiedades opcionales
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 41 de 80.
No todos los campos están siempre presentes. En Lua, un campo que falta en una tabla simplemente se lee como nil, lo cual es flexible, pero también es la forma en que se cuelan errores como attempt to concatenate a nil value.
Luau permite indicar esto explícitamente en una forma: añade ? después del tipo de un campo para marcarlo como opcional:
type User = {
name: string, -- obligatorio
email: string?, -- opcional: string o nil
}
local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ correcto, email es opcionalYa habías visto esto con las variables: string? es una forma abreviada de string | nil. Ahora la misma idea se aplica a los campos individuales de una forma.
Como un campo opcional podría ser nil, debes comprobarlo antes de usarlo. El patrón clásico de Lua funciona y, en modo estricto, el verificador acota el tipo dentro de la rama:
if bob.email then
print(`email: {bob.email}`) -- aquí email es una cadena de texto
else
print("no email on file")
endOpcional significa «puede estar ausente». No significa «cualquier tipo». Si email existe, debe seguir siendo una cadena.
Desafío
FácilImprime los contactos cuyo correo electrónico podría faltar.
- Escribe
type User = {name: string, email: string?}, despuéslocal mia: User = {name = "Mia", email = "mia@coddy.tech"}ylocal leo: User = {name = "Leo"}. - Escribe
local function printContact(user: User)para imprimir`{user.name}: {user.email}`o, si no tiene correo electrónico,`{user.name}: no email`. - Llama a la función para
miay después paraleo.
Presiona Run Code: el resultado muestra Mia: mia@coddy.tech y Leo: no email.
Pruébalo tú mismo
-- 1) define el tipo User con un email opcional, luego mia y leo
-- 2) define printContact(user: User) con una comprobación del email
-- 3) llama a printContact para mia y luego para leo
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 tipos3Tablas 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