Menu
CoddyTech

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 Direction

Dans 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
end

Un 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() :: Direction

Une 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.

challenge icon

Défi

Facile

Transforme une direction saisie par le joueur en action.

  1. Écris type Direction = "up" | "down" | "left" | "right".
  2. Écris local function getAction(direction: Direction): string qui renvoie "Climb", "Drop", "Turn left" ou "Turn right".
  3. Lis local direction = io.read() :: Direction et affiche getAction(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

Entraînez-vous par vous-même : Compilateur Luau en ligne