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, AliceO 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
-- ...
endDesafio
FácilCrie 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:
calculateTax(100)calculateTax(200, 0.08)formatGreeting("Alice")formatGreeting("Bob", "Good morning")calculateShipping(5, 100)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
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