Propriedades Opcionais
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 41 de 80.
Nem todos os campos estão sempre presentes. Em Lua, um campo ausente de uma tabela simplesmente é lido como nil, o que é flexível, mas também é assim que bugs como attempt to concatenate a nil value acabam surgindo.
Luau permite que um tipo de estrutura indique isso explicitamente: adicione ? depois do 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 certo, email é opcionalVocê já viu isso antes com variáveis: string? é uma forma abreviada de string | nil. Agora, a mesma ideia se aplica a campos individuais de uma estrutura.
Como um campo opcional pode ser nil, você precisa verificar antes de usá-lo. O padrão clássico de Lua funciona e, no modo estrito, o verificador restringe o tipo dentro do ramo:
if bob.email then
print(`email: {bob.email}`) -- aqui email é uma string
else
print("no email on file")
endOpcional significa "pode estar ausente". Isso não significa "qualquer tipo". Se email existir, ainda precisará ser uma string.
Desafio
FácilImprima contatos cujo e-mail pode estar ausente.
- Escreva
type User = {name: string, email: string?}, depoislocal mia: User = {name = "Mia", email = "mia@coddy.tech"}elocal leo: User = {name = "Leo"}. - Escreva
local function printContact(user: User)para imprimir`{user.name}: {user.email}`ou`{user.name}: no email`quando não houver e-mail. - Chame-a para
miae, depois, paraleo.
Pressione Run Code: a saída mostra Mia: mia@coddy.tech e Leo: no email.
Experimente você mesmo
-- 1) tipo User com um email opcional, depois mia e leo
-- 2) printContact(user: User) com uma verificação do email
-- 3) chame a função para mia, depois para leo
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
Tipagem de parâmetros e valores de retornoTipagem de funções anônimasFunções sem retornoParâmetros opcionaisValores padrão dos parâmetrosValores padrão para booleanosFunções variádicasDefinindo tipos de funçãoRecapitulação: funções tipadas2Tipos básicos
Número, string e booleanoO tipo 'any': válvula de escapeO tipo 'unknown'Tipos nulos e opcionaisInferência de tipos na práticaAnotações explícitas de tipoRevisão: prática com tipos básicos5Aliases, 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 MapsPercorrendo TabelasTabelas com Formatos MistosLendo uma GradeConstruindo uma Gradetable.unpackRevisão: Arrays e MapsPratique por conta própria: Compilador de Luau online