Menu
Coddy logo textTech

Parâmetros Opcionais

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

Em Lua puro, você sempre podia omitir argumentos: os que faltavam silenciosamente se tornavam nil, e esquecer de lidar com isso era uma fonte clássica de bugs. Luau torna essa possibilidade explícita: adicione ? ao tipo de um parâmetro para marcá-lo como opcional.

function greet(name: string, title: string?): string
    if title then
        return `{title} {name}`
    end
    return `Hello, {name}`
end

print(greet("Ada"))          -- Olá, Ada
print(greet("Ada", "Dr."))   -- Dr. Ada

string? significa “string ou nil”. Os chamadores podem passar uma string ou simplesmente ignorar o argumento; parâmetros sem ? são obrigatórios, e o verificador sinaliza chamadas que os omitem.

Dentro da função, um parâmetro opcional pode ser nil, portanto verifique-o antes de usá-lo: if title then ... end é o padrão convencional. Ignore a verificação e concatene nil a uma string, e você obterá o mesmo erro em tempo de execução que Lua sempre apresentava; o verificador de tipos avisa você primeiro.

challenge icon

Desafio

Fácil

Crie uma função chamada createUserProfile que receba username: string (obrigatório) e displayName: string? (opcional), retornando uma string:

  • Quando ambos forem fornecidos, retorne: "Profile: [displayName] (@[username])"
  • Quando somente o nome de usuário for fornecido, retorne: "Profile: @[username]"

Crie uma função chamada calculateDiscount que receba price: number (obrigatório) e membershipLevel: string? (opcional), retornando um number:

  • Quando um nível de associação for fornecido, retorne o preço reduzido em 10% (multiplique por 0.9)
  • Caso contrário, retorne o preço inalterado

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

  1. createUserProfile("john_doe", "John Doe")
  2. createUserProfile("jane_smith")
  3. calculateDiscount(100, "premium")
  4. calculateDiscount(75)

Experimente você mesmo

-- Escreva o código aqui
-- createUserProfile(username: string, displayName: string?): string
-- calculateDiscount(price: number, membershipLevel: string?): number
-- então imprima os quatro 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