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