Menu
Coddy logo textTech

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 é opcional

Você 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")
end

Opcional significa "pode estar ausente" — não significa "qualquer tipo". Se email existir, ele ainda deve ser uma string.

challenge icon

Desafio

Fácil

Crie um alias de tipo chamado User com:

  • name do tipo string (obrigatório)
  • email do tipo string? (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:

  1. chame printContact(alice)
  2. chame printContact(bob)
  3. 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
quiz iconTeste seus conhecimentos

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