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 Maps