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 faltante de una tabla simplemente se lee como nil, lo cual es flexible, pero también es la forma en que aparecen errores como attempt to concatenate a nil value.
Luau permite que una forma lo indique 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 abreviatura 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 el modo estricto, el comprobador restringe 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, debe seguir siendo una cadena.
Desafío
FácilCrea un alias de tipo llamado User con:
namede tipostring(obligatorio)emailde tipostring?(opcional)
Crea dos usuarios:
alice: nombre"Alice", correo electrónico"alice@luau.dev"bob: nombre"Bob", sin correo electrónico
Crea una función printContact que reciba un User. Si el usuario tiene un correo electrónico, 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 él)
-- 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