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ê tratar. Muitas vezes, o que você realmente quer é um valor alternativo: "se quem chamou não informou, assuma X". Luau não tem sintaxe de valor padrão na assinatura (não existe greeting: string = "Hello"); em vez disso, você usa o idiomático padrão do Lua, agora com 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

O parâmetro é anotado como opcional (string?), e a primeira linha do corpo substitui nil pelo valor padrão. Isso funciona porque nil é falso: nil or "Hello" é avaliado como "Hello". Depois dessa linha, o verificador sabe que greeting não pode mais ser nil.

Uma ressalva que você já conhece do Lua: or também substitui false! Para um parâmetro boolean?, flag = flag or true substituiria silenciosamente um false explícito. Em vez disso, use uma verificação explícita de nil:

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 receba price: number (obrigatório) e rate: number?, com valor padrão 0.05. Retorne o valor do imposto (price * rate) como um number.

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

Crie uma função chamada calculateShipping que receba weight: number, distance: number (ambos obrigatórios) e expedited: boolean?, com valor padrão false: use uma verificação explícita de nil para este parâmetro! Calcule (weight * 0.5) + (distance * 0.1) e, se expedited for true, 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?) -- taxa 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