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 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 aparecem.

O Luau permite que uma estrutura declare 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 bem, email é opcional

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

Opcional significa “pode estar ausente”. Isso não significa “qualquer tipo”. Se email existir, ele ainda deverá 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: nome "Alice", e-mail "alice@luau.dev"
  • bob: nome "Bob", sem e-mail

Crie uma função printContact que recebe um User. Se o usuário tiver um e-mail, 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-a 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