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.

No Lua puro você sempre podia omitir argumentos — os ausentes silenciosamente se tornavam nil, e esquecer de tratar isso era uma fonte clássica de bugs. O 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? lê-se como "string ou nil". Quem chama a função pode passar uma string ou omitir o argumento completamente; 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, então faça o check antes de usar (using) — if title then ... end é o padrão comum. Se você pular essa verificação e concatenar nil em uma string, obterá o mesmo erro em tempo de execução que o Lua sempre retornou; o verificador de tipos apenas o avisa before.

challenge icon

Desafio

Fácil

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

  • Quando ambos forem fornecidos, retorne: "Profile: [displayName] (@[username])"
  • Quando apenas o username for fornecido, retorne: "Profile: @[username]"

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

  • Quando o 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