Tipos Literais
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 33 de 73.
Tipos como string permitem qualquer string, mas às vezes apenas alguns valores exatos fazem sentido. Um tipo literal usa o próprio valor como tipo:
local mode: "dark" = "dark" -- apenas a string "dark" é permitida
local locked: true = true -- apenas o booleano true é permitidoPor si sós, tipos de valor único são uma curiosidade. Combinados com unions, eles se tornam uma das ferramentas mais úteis do Luau: um conjunto estritamente controlado de valores allowed:
type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"
local move: Direction = "north" -- ✓
local state: GameState = "playing" -- ✓
-- local bad: Direction = "diagonal" -- ✗ erro de tipo!Agora, um erro de digitação como "nort" ou um valor inválido como "diagonal" é detectado enquanto você edita; com uma string simples, ele passaria sem problemas e causaria uma falha em tempo de execução, se você tiver sorte o bastante para perceber.
Tipos literal diferenciam maiúsculas de minúsculas e são exatos: "North" não corresponde a "north". Literais de string são o caso mais comum, mas literais boolean e, nas versões mais recentes do Luau, literais numéricos funcionam da mesma forma. Esse padrão, uma união de literais de string, também é como o Luau substitui os enums de outras linguagens, como você verá em um capítulo posterior.
Desafio
FácilCrie três aliases de tipo de união literal:
Direction="north" | "south" | "east" | "west"GameState="menu" | "playing" | "paused" | "gameover"Difficulty="easy" | "medium" | "hard"
Declare, usando os aliases:
playerDirection: Direction="north"currentState: GameState="playing"selectedDifficulty: Difficulty="medium"
Crie uma função movePlayer(direction: Direction): string que retorne "Moving [direction]" e uma função updateGameState(state: GameState): string que retorne "Game state: [state]".
Imprima, cada um em sua própria linha:
movePlayer(playerDirection)updateGameState(currentState)- o valor de
selectedDifficulty
Experimente você mesmo
-- Escreva o código aqui
-- tipar Direction / GameState / Difficulty como uniões literais
-- declarar playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- imprima os três resultados
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 Tipos3Tabelas 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 MapsPratique por conta própria: Compilador de Lua online