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, AliceO 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
-- ...
endDesafio
FácilCrie 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:
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?) -- 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
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 MapsPratique por conta própria: Compilador de Lua online