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 que debes gestionar. A menudo, lo que realmente quieres es un valor de respaldo: «si quien llama no lo indicó, supone X». Luau no tiene una sintaxis de valor predeterminado en la firma (no existe greeting: string = "Hello"); en su lugar, usas el modismo 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"))            -- Hello, Alice
print(greet("Alice", "Howdy"))   -- Howdy, Alice

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

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

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 reciba price: number (obligatorio) y rate: number? con un valor predeterminado de 0.05. Devuelve el importe del impuesto (price * rate) como un number.

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

Crea una función llamada calculateShipping que reciba weight: number, distance: number (ambos obligatorios) y expedited: boolean? con un valor predeterminado de false: ¡usa una comprobación explícita de nil para este último! Calcula (weight * 0.5) + (distance * 0.1) y, si expedited es true, 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?) -- rate 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

Practica por tu cuenta: Compilador de Lua online