Menu
Coddy logo textTech

Parámetros Opcionales

Parte de la sección Introducción a Luau del Journey de Lua de Coddy — lección 25 de 73.

En Lua puro siempre podías omitir argumentos — los faltantes se convertían silenciosamente en nil, y olvidar gestionar eso era una fuente clásica de errores. Luau hace que esta posibilidad sea explícita: añade ? al tipo de un parámetro para marcarlo como opcional.

function greet(name: string, title: string?): string
    if title then
        return `{title} {name}`
    end
    return `Hello, {name}`
end

print(greet("Ada"))          -- Hola, Ada
print(greet("Ada", "Dr."))   -- Dr. Ada

string? se lee como "string o nil". Quienes realizan la llamada pueden pasar una cadena o omitir el argumento por completo; los parámetros sin ? son obligatorios, y el comprobador señala las llamadas que los omiten.

Dentro de la función, un parámetro opcional puede ser nil, así que verifícalo antes de usarlo — if title then ... end es el patrón estándar. Si te saltas la comprobación y concatenas nil en una cadena, obtendrás el mismo error en tiempo de ejecución que Lua siempre te dio; el comprobador de tipos te advierte primero.

challenge icon

Desafío

Fácil

Crea una función llamada createUserProfile que reciba username: string (obligatorio) y displayName: string? (opcional), devuelviendo un string:

  • Cuando ambos sean proporcionados, devuelve: "Profile: [displayName] (@[username])"
  • Cuando solo se proporcione el nombre de usuario, devuelve: "Profile: @[username]"

Crea una función llamada calculateDiscount que reciba price: number (obligatorio) y membershipLevel: string? (opcional), devuelviendo un number:

  • Cuando se proporcione un nivel de membresía, devuelve el precio reducido en un 10% (multiplica por 0.9)
  • De lo contrario, devuelve el precio sin cambios

Llama e imprime, cada uno en su propia línea:

  1. createUserProfile("john_doe", "John Doe")
  2. createUserProfile("jane_smith")
  3. calculateDiscount(100, "premium")
  4. calculateDiscount(75)

Pruébalo tú mismo

-- Escribe código aquí
-- createUserProfile(username: string, displayName: string?): string
-- calculateDiscount(price: number, membershipLevel: string?): number
-- luego imprime los cuatro resultados
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