O Padrão Enum no Luau
Parte da seção Introdução ao Luau do Journey de Lua da Coddy — lição 51 de 73.
Programas estão cheios de valores vindos de um conjunto pequeno e fixo: um pedido está pendente, enviado ou entregue; um jogador está virado para cima, baixo, esquerda ou direita. Muitas linguagens têm uma palavra-chave enum para isso. O Luau não tem — e não precisa de uma, porque duas ferramentas que você já possui resolvem o trabalho.
Padrão 1: a tabela de constantes. Uma tabela simples mapeia nomes significativos para valores, substituindo "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, comparar com ele e passá-lo adiante — assim como as tabelas que você usou até agora.
Padrão 2: a união literal. Um tipo feito de valores exatos de string, usando os tipos literais que você conheceu no capítulo de uniões:
type Color = "red" | "green" | "blue"
local favorite: Color = "green" -- ✓
local oops: Color = "yellow" -- ✗ type errorA união existe apenas para o verificador de tipos — custo zero em tempo de execução —, mas ela garante que uma variável não possa conter nada fora do conjunto. Os dois padrões se complementam: a tabela fornece valores em tempo de execução sob um único nome; a união fornece uma garantia em tempo de compilação. Mais adiante neste capítulo, você também conhecerá table.freeze, que protege uma tabela de constantes de ser modificada em tempo de execução.
Experimente você mesmo
Esta lição não inclui um desafio de código.
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
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
Tipando Parâmetros e Valores de RetornoTipando Funções AnônimasFunções que Não Retornam NadaParâmetros OpcionaisValores Padrão para ParâmetrosFunções VariádicasDefinindo Tipos de FunçõesRecapitulação: Funções Tipadas2Tipos Fundamentais
Tipos Básicos: num, str, boolO Tipo 'any': Escape HatchO Tipo 'unknown'Tipos Nil e OpcionaisInferência de Tipos na PráticaAnotações Explícitas de TiposReciclagem: Prática de Tipos Fundamentais5Aliases, 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 MapsIterando Sobre TabelasTabelas de Formato MistoArrays Tipados Multidimensionaistable.unpack e VarargsRecapitulando: Arrays e Maps