Menu
CoddyTech

O Padrão Enum no Luau

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 55 de 80.

Os programas estão cheios de valores extraídos de um conjunto pequeno e fixo: um pedido está pendente, enviado ou entregue; um jogador está voltado para cima, baixo, esquerda ou direita. Muitas linguagens têm uma palavra-chave enum para isso. Luau não tem, e não precisa ter, porque duas ferramentas que você já conhece dão conta do trabalho.

Padrão 1: a tabela de constantes. Uma tabela simples associa nomes significativos a valores, substituindo os “números mágicos” espalhados pelo código:

local Status = {
    Pending = 1,
    Active = 2,
    Done = 3,
}

print(Status.Active) -- 2

Este é um valor real em tempo de execução: você pode ler Status.Active, compará-lo e passá-lo adiante, como faz com as tabelas que vem usando desde o início.

Padrão 2: a união de literais. Um tipo composto por valores de string exatos, usando os tipos literais que você conheceu no capítulo sobre uniões:

type Color = "red" | "green" | "blue"
local favorite: Color = "green" -- ✓
local oops: Color = "yellow"    -- ✗ erro de tipo

A união existe apenas para o verificador, sem custo em tempo de execução, mas garante que uma variável não possa conter nada fora do conjunto. Os dois padrões se complementam: a tabela oferece valores em tempo de execução sob um único nome; a união oferece uma garantia em tempo de compilação. Mais adiante neste capítulo, você também conhecerá table.freeze, que protege uma tabela de constantes contra modificações em tempo de execução.

challenge icon

Desafio

Fácil

Experimente os dois padrões de enum lado a lado.

  1. Crie a tabela de constantes local Speed = {Slow = 8, Fast = 24}.
  2. Escreva type Pace = "slow" | "fast" e declare local pace: Pace = "fast".
  3. Imprima Speed.Fast e, em seguida, pace.

Pressione Executar código: a saída mostra 24 e fast.

Experimente você mesmo

-- 1) uma tabela constante Speed com Slow = 8, Fast = 24
-- 2) tipo Pace = "slow" | "fast", depois local pace: Pace = "fast"
-- 3) imprima Speed.Fast, depois pace

Todas as lições de Introdução ao Luau

Pratique por conta própria: Compilador de Luau online