Menu
Coddy logo textTech

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 opcional

Ya 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")
end

Opcional significa "puede estar ausente" — no significa "cualquier tipo". Si email existe, aún debe ser un string.

challenge icon

Desafío

Fácil

Crea un alias de tipo llamado User con:

  • name de tipo string (obligatorio)
  • email de tipo string? (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:

  1. llama a printContact(alice)
  2. llama a printContact(bob)
  3. 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
quiz iconPonte a prueba

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