Menu
Coddy logo textTech

Utiliser des Enums d'unions littérales

Fait partie de la section Introduction à Luau du Journey Lua de Coddy — leçon 54 sur 73.

Les unions de littéraux prennent tout leur sens en tant que paramètres de fonction. Typez un paramètre avec l'union et le vérificateur garantit que la fonction n'est 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 : pas un Direction

À l'intérieur de la fonction, gérez les membres de manière exhaustive avec une chaîne if/elseif. Étant donné que le type limite l'input à four valeurs, vérifier les trois premières et laisser else prendre la dernière couvre l'ensemble des 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 à prendre en compte : les chaînes venant de l'extérieur — comme io.read() — sont typées comme un simple string plain, car le vérificateur ne peut pas savoir ce qu'un utilisateur va saisir. Le cast :: que vous avez appris plus tôt lui indique de traiter la valeur comme votre type enum :

local direction = io.read() :: Direction

Un cast est une promesse, pas une vérification — à l'exécution, rien ne vérifie l'input. Un code de production validerait d'abord ; ici, cela permet aux fonctions typées d'accepter proprement les saisies de l'utilisateur.

challenge icon

Défi

Facile

Créez le type d'union de littéraux Direction avec les membres "up", "down", "left" et "right".

Créez une fonction move qui prend direction: Direction et affiche Moving [direction]...

Créez une fonction getMovementDescription qui prend direction: Direction, renvoie un string, et gère chaque membre avec if/elseif/else :

  • "up"Going upward
  • "down"Going downward
  • "left"Turning left
  • "right"Turning right

Lisez une ligne saisie par l'utilisateur avec io.read() et transtypez-la en Direction avec ::. Ensuite :

  1. appelez move avec la direction
  2. affichez le résultat de getMovementDescription pour cette même direction

Essayez vous-même

-- Écrivez le code ici
-- 1) définir le type Direction
-- 2) écrire move et getMovementDescription (if/elseif/else)
-- 3) lire l'entrée : local direction = io.read() :: Direction
-- 4) appeler move, puis afficher la description
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Introduction à Luau