Propriedades Opcionais
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 39 de 73.
Nem todo campo está sempre presente. Em Lua, um campo de tabela ausente simplesmente é lido como nil — o que é flexível, mas também é assim que bugs como attempt to concatenate a nil value aparecem sorrateiramente.
O Luau permite que um formato declare isso explicitamente: adicione ? após o tipo de um campo para marcá-lo como opcional:
type User = {
name: string, -- obrigatório
email: string?, -- opcional: string ou nil
}
local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ tudo bem, email é opcionalVocê já viu isso antes com variáveis: string? é um atalho para string | nil. A mesma ideia agora se aplica a campos individuais de um formato.
Como um campo opcional pode ser nil, você deve verificar antes de usá-lo. O padrão clássico do Lua funciona, e no modo estrito o verificador afunila o tipo dentro do bloco:
if bob.email then
print(`email: {bob.email}`) -- aqui email é uma string
else
print("no email on file")
endOpcional significa "pode estar ausente" — não significa "qualquer tipo". Se email existir, ele ainda deve ser uma string.
Desafio
FácilCrie um alias de tipo chamado User com:
namedo tipostring(obrigatório)emaildo tipostring?(opcional)
Crie dois usuários:
alice— name"Alice", email"alice@luau.dev"bob— name"Bob", sem email
Crie uma função printContact que recebe um User. Se o usuário tiver um email, ela imprime [name] - [email]; caso contrário, imprime [name] - no email.
Em seguida:
- chame
printContact(alice) - chame
printContact(bob) - imprima o resultado da comparação
bob.email == nil
Experimente você mesmo
-- Escreva o código aqui
-- 1) defina o tipo User com um campo email opcional
-- 2) crie alice (com email) e bob (sem)
-- 3) escreva printContact com uma verificação de nil
-- 4) chame-o para ambos os usuários, depois imprima bob.email == nil
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