Menu
CoddyTech

Enums de String como Unions

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

Números geram registros enigmáticos: ver 2 diz pouco, ver "down" diz tudo. Para enums legíveis, os tipos de união de literais do Luau são a ferramenta: um tipo cujos membros são strings exatas:

type Direction = "up" | "down" | "left" | "right"

local facing: Direction = "up"    -- ✓
local typo: Direction = "upp"     -- ✗ erro de tipo durante a edição

Uma variável anotada com Direction pode conter essas quatro strings e nada mais. Escreva uma delas incorretamente e o verificador detecta o erro instantaneamente: o bug nunca chega a um jogador.

Em tempo de execução, os valores são strings simples. Imprima-os, concatene-os, compare-os usando ==. Tudo o que você sabe sobre strings se aplica:

print(facing)            -- cima
print(`facing {facing}`) -- facing cima

Compare os dois padrões que você tem agora: a tabela de constantes cria um valor em tempo de execução (UserRole) que contém membros, enquanto a união de literais não cria valor algum. Não existe uma tabela Direction, apenas uma regra que o verificador impõe sobre quais strings são válidas. Valores descritivos e autoexplicativos, sem custo em tempo de execução, fazem das uniões de literais o estilo de enum preferido no código Luau.

challenge icon

Desafio

Fácil

Armazene uma direção que só pode ser um de quatro nomes.

  1. Escreva type Direction = "up" | "down" | "left" | "right".
  2. Declare local facing: Direction = "left".
  3. Imprima facing, depois `The player moves {facing}`.

Pressione Executar código: a saída mostra left e The player moves left.

Experimente você mesmo

-- 1) defina o tipo Direction como uma união de quatro strings
-- 2) local facing: Direction = "left"
-- 3) imprima facing e, em seguida, a frase

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

Pratique por conta própria: Compilador de Luau online