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çãoUma 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 cimaCompare 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.
Desafio
FácilArmazene uma direção que só pode ser um de quatro nomes.
- Escreva
type Direction = "up" | "down" | "left" | "right". - Declare
local facing: Direction = "left". - 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
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