Menu
Coddy logo textTech

Valores por Defecto en Parámetros

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

Los parámetros opcionales te dejan un nil por manejar. A menudo lo que realmente quieres es un valor de respaldo — "si quien llama no especificó, asume X". Luau no tiene sintaxis de valores predeterminados en la firma (no existe greeting: string = "Hello"); en su lugar se usa el idioma clásico de Lua, ahora con tipos:

function greet(name: string, greeting: string?): string
    greeting = greeting or "Hello"
    return `{greeting}, {name}`
end

print(greet("Alice"))            -- Hola, Alice
print(greet("Alice", "Howdy"))   -- Howdy, Alice

El parámetro está anotado como opcional (string?), y la primera línea del cuerpo reemplaza nil con el valor predeterminado. Funciona porque nil es falsy — nil or "Hello" se evalúa como "Hello". Después de esa línea, el analizador sabe que greeting ya no puede ser nil.

Una advertencia que conoces de Lua: ¡or también reemplaza false! Para un parámetro boolean?, flag = flag or true sobrescribiría silenciosamente un false explícito. Usa una comprobación explícita de nil en su lugar:

function ship(weight: number, expedited: boolean?): number
    if expedited == nil then
        expedited = false
    end
    -- ...
end
challenge icon

Desafío

Fácil

Crea una función llamada calculateTax que acepte price: number (obligatorio) y rate: number? con valor predeterminado 0.05. Devuelve el importe del impuesto (price * rate) como un number.

Crea una función llamada formatGreeting que acepte name: string (obligatorio) y timeOfDay: string? con valor predeterminado "Hello". Devuelve "[timeOfDay], [name]!" como un string.

Crea una función llamada calculateShipping que acepte weight: number, distance: number (ambos obligatorios) y expedited: boolean? con valor predeterminado false — ¡utiliza una comprobación explícita de nil para esta! Calcula (weight * 0.5) + (distance * 0.1), y si expedited es verdadero, multiplica el resultado por 2. Devuelve un number.

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

  1. calculateTax(100)
  2. calculateTax(200, 0.08)
  3. formatGreeting("Alice")
  4. formatGreeting("Bob", "Good morning")
  5. calculateShipping(5, 100)
  6. calculateShipping(3, 50, true)

Pruébalo tú mismo

-- Escribe código aquí
-- calculateTax(price: number, rate: number?) -- tasa por defecto 0.05
-- formatGreeting(name: string, timeOfDay: string?) -- por defecto "Hello"
-- calculateShipping(weight, distance, expedited: boolean?) -- por defecto false
-- luego imprime los seis 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