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

Pratique por conta própria: Compilador de Lua online