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) -- 2Este é 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 tipoA 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.
Desafio
FácilExperimente os dois padrões de enum lado a lado.
- Crie a tabela de constantes
local Speed = {Slow = 8, Fast = 24}. - Escreva
type Pace = "slow" | "fast"e declarelocal pace: Pace = "fast". - Imprima
Speed.Faste, 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
1Começando com o Luau
O que é Luau?Por que usar Luau?Seu primeiro código em LuauVerificação de tipos e modos de erroRecapitulando: Introdução ao Luau4Trabalhando com funções
Tipagem de parâmetros e valores de retornoTipagem de funções anônimasFunções sem retornoParâmetros opcionaisValores padrão dos parâmetrosValores padrão para booleanosFunções variádicasDefinindo tipos de funçãoRecapitulação: funções tipadas2Tipos básicos
Número, string e booleanoO tipo 'any': válvula de escapeO tipo 'unknown'Tipos nulos e opcionaisInferência de tipos na práticaAnotações explícitas de tipoRevisão: prática com tipos básicos5Aliases, Uniões, Interseções
Aliases de Tipos para PrimitivosTipos de UniãoTrabalhando com Tipos de UniãoTipos LiteraisTipos de InterseçãoCombinando Aliases de TiposRecapitulando: Combinações Avançadas de Tipos8Enums, do Jeito Luau
O Padrão Enum no LuauEnums Numéricos com TablesEnums de String como UnionsUsando Enums de Union LiteralCongelando Tables ConstantesRecapitulação: Enums, do Jeito Luau3Tabelas Tipadas: Arrays e Maps
Arrays TipadosAdicionando e Lendo ElementosO que é um Tipo Map?Declarando e Acessando MapsPercorrendo TabelasTabelas com Formatos MistosLendo uma GradeConstruindo uma Gradetable.unpackRevisão: Arrays e MapsPratique por conta própria: Compilador de Luau online