Propiedades opcionales
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 39 de 73.
No todos los campos están siempre presentes. En Lua, un campo de tabla que falta 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 que una forma lo exprese explícitamente: añade ? después del tipo de un campo para marcarlo como opcional:
type User = {
name: string, -- requerido
email: string?, -- opcional: string o nil
}
local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ bien, email es opcionalYa has visto esto antes con variables: string? es una forma abreviada de string | nil. La misma idea se aplica ahora a los campos individuales de una forma.
Dado que un campo opcional puede ser nil, debes comprobarlo antes de usarlo. El patrón clásico de Lua funciona, y en modo estricto el verificador reduce el tipo dentro de la rama:
if bob.email then
print(`email: {bob.email}`) -- aquí email es un string
else
print("no email on file")
endOpcional significa "puede estar ausente" — no significa "cualquier tipo". Si email existe, aún debe ser un string.
Desafío
FácilCrea un alias de tipo llamado User con:
namede tipostring(obligatorio)emailde tipostring?(opcional)
Crea dos usuarios:
alice— nombre"Alice", email"alice@luau.dev"bob— nombre"Bob", sin email
Crea una función printContact que reciba un User. Si el usuario tiene un email, imprime [name] - [email]; de lo contrario, imprime [name] - no email.
Después:
- llama a
printContact(alice) - llama a
printContact(bob) - imprime el resultado de comparar
bob.email == nil
Pruébalo tú mismo
-- Escribe código aquí
-- 1) define el tipo User con un campo email opcional
-- 2) crea alice (con email) y bob (sin)
-- 3) escribe printContact con una comprobación de nil
-- 4) llámalo para ambos usuarios, luego imprime bob.email == nil
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 MapsPractica por tu cuenta: Compilador de Lua online