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 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 opcional

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

Opcional significa «puede estar ausente». No significa «cualquier tipo». Si email existe, debe seguir siendo una cadena.

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", 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:

  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 él)
-- 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

Practica por tu cuenta: Compilador de Lua online