Utiliser des Enums d'unions littérales
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 58 sur 80.
Les unions littérales révèlent leur utilité comme paramètres de fonction. Type un paramètre avec l’union et le vérificateur garantit que la fonction ne sera appelée qu’avec un membre valide :
type Direction = "up" | "down" | "left" | "right"
local function move(direction: Direction)
print(`Moving {direction}...`)
end
move("left") -- ✓
move("north") -- ✗ erreur de type : ce n'est pas une DirectionDans la fonction, traite les membres de façon exhaustive avec une chaîne if/elseif. Comme le type limite l’entrée à quatre valeurs, en vérifier trois et laisser else prendre la dernière couvre tous les cas :
local function describe(direction: Direction): string
if direction == "up" then
return "Going upward"
elseif direction == "down" then
return "Going downward"
elseif direction == "left" then
return "Turning left"
else
return "Turning right"
end
endUn détail délicat : les chaînes provenant de l’extérieur, comme io.read(), sont typées comme de simples string, car le vérificateur ne peut pas savoir ce que l’utilisateur va saisir. L’opérateur de conversion de type de Luau, ::, règle ce problème : value :: Type indique au vérificateur de traiter la valeur comme étant de ce type. La leçon sur les assertions de type, vers la fin de cette section, traite en détail des conversions ; pour l’instant, une ligne suffit :
local direction = io.read() :: DirectionUne conversion est une promesse, pas une vérification : à l’exécution, rien ne valide la saisie. Dans du code de production, il faudrait d’abord la valider ; ici, elle permet aux fonctions typées d’accepter proprement les saisies de l’utilisateur.
Défi
FacileTransforme une direction saisie par le joueur en action.
- Écris
type Direction = "up" | "down" | "left" | "right". - Écris
local function getAction(direction: Direction): stringqui renvoie"Climb","Drop","Turn left"ou"Turn right". - Lis
local direction = io.read() :: Directionet affichegetAction(direction).
Appuie sur Exécuter le code : avec la saisie up, la sortie affiche Climb.
Essayez vous-même
-- 1) type Direction
-- 2) getAction(direction: Direction): string
-- 3) local direction = io.read() :: Direction, puis affiche l'action
Toutes les leçons de Introduction à Luau
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typer les paramètres et les valeurs de retourTyper les fonctions anonymesFonctions sans valeur de retourParamètres optionnelsValeurs par défaut des paramètresValeurs par défaut pour les booléensFonctions variadiquesDéfinir des types de fonctionsRécapitulatif : fonctions typées7Projet : gestionnaire de tâches typé
Projet : la structure d’une tâcheFonction pour ajouter une tâche2Types fondamentaux
Nombre, chaîne de caractères et booléenLe type « any » : une échappatoireLe type « unknown »Types nil et optionnelsL’inférence de types en actionAnnotations de type explicitesRécapitulatif : exercices sur les types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées8Les Enums, à la manière de Luau
Le pattern Enum dans LuauEnums numériques avec des tablesEnums de chaînes comme unionsUtiliser des Enums d'unions littéralesGeler les tables de constantesRécapitulatif : Les Enums, à la manière de Luau3Tables typées : tableaux et maps
Tableaux typésAjouter et lire des élémentsQu’est-ce qu’un type Map ?Déclarer et accéder aux mapsParcourir les tablesTables de formes mixtesLire une grilleConstruire une grilletable.unpackRécapitulatif : tableaux et mapsEntraînez-vous par vous-même : Compilateur Luau en ligne