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 Maps