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. Adastring? 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.
Desafio
FácilCrie 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:
createUserProfile("john_doe", "John Doe")createUserProfile("jane_smith")calculateDiscount(100, "premium")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
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
1Começando com o Luau
O que é Luau?Por que usar Luau?Seu primeiro código em LuauVerificação de tipos e modos de erroRecapitulando: Introdução ao Luau4Trabalhando com Funções
Tipando Parâmetros e Valores de RetornoTipando Funções AnônimasFunções que Não Retornam NadaParâmetros OpcionaisValores Padrão para ParâmetrosFunções VariádicasDefinindo Tipos de FunçõesRecapitulação: Funções Tipadas2Tipos Fundamentais
Tipos Básicos: num, str, boolO Tipo 'any': Escape HatchO Tipo 'unknown'Tipos Nil e OpcionaisInferência de Tipos na PráticaAnotações Explícitas de TiposReciclagem: Prática de Tipos Fundamentais5Aliases, Uniões, Interseções
Aliases de Tipos para PrimitivosTipos de UniãoTrabalhando com Tipos de UniãoTipos LiteraisTipos de InterseçãoCombinando Aliases de TiposRecapitulando: Combinações Avançadas de Tipos3Tabelas Tipadas: Arrays e Maps
Arrays TipadosAdicionando e Lendo ElementosO que é um Tipo Map?Declarando e Acessando MapsIterando Sobre TabelasTabelas de Formato MistoArrays Tipados Multidimensionaistable.unpack e VarargsRecapitulando: Arrays e Maps