Menu
Coddy logo textTech

Valores Padrão para Parâmetros

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 26 de 73.

Parâmetros opcionais deixam um nil para você lidar. Frequentemente, o que você realmente quer é um valor de fallback — "se quem chamou não especificou, assuma X". O Luau não possui sintaxe de valor padrão na assinatura (não existe greeting: string = "Hello"); em vez disso, você usa o idioma clássico do Lua, agora com tipos:

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

print(greet("Alice"))            -- Olá, Alice
print(greet("Alice", "Howdy"))   -- Howdy, Alice

O parâmetro é anotado como opcional (string?), e a primeira linha do corpo substitui nil pelo valor padrão. Isso funciona porque nil é falso (falsy) — nil or "Hello" é avaliado como "Hello". Após essa linha, o verificador de tipos sabe que greeting não pode mais ser nil.

Um aviso importante que você já conhece do Lua: o operador or também substitui false! Para um parâmetro boolean?, a atribuição flag = flag or true sobrescreveria silenciosamente um false explícito. Use uma verificação explícita de nil (nil-check) em seu lugar:

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

Desafio

Fácil

Crie uma função chamada calculateTax que recebe price: number (obrigatório) e rate: number? com valor padrão de 0.05. Retorne o valor do imposto (price * rate) como um number.

Crie uma função chamada formatGreeting que recebe name: string (obrigatório) e timeOfDay: string? com valor padrão de "Hello". Retorne "[timeOfDay], [name]!" como uma string.

Crie uma função chamada calculateShipping que recebe weight: number, distance: number (ambos obrigatórios) e expedited: boolean? com valor padrão de false — use uma verificação explícita de nil para esta! Calcule (weight * 0.5) + (distance * 0.1) e, se expedited for verdadeiro, multiplique o resultado por 2. Retorne um number.

Chame e imprima, cada um em sua própria linha:

  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)

Experimente você mesmo

-- Escreva o código aqui
-- calculateTax(price: number, rate: number?) -- rate padrão 0.05
-- formatGreeting(name: string, timeOfDay: string?) -- padrão "Hello"
-- calculateShipping(weight, distance, expedited: boolean?) -- padrão false
-- então imprima os seis resultados
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Introdução ao Luau

Pratique por conta própria: Compilador de Lua online