Aller au contenu principal
Version: 1.0.0

Énumérations

Une énumération décrit un ensemble fermé de valeurs nommées : priorité d'un ticket, état d'un dossier ou résultat d'une vérification. Elle évite de représenter ces choix par du texte libre.

Déclarer et utiliser un choix métier​

priorities.tb
module examples.priorities

enum Priority
normal
watch
urgent

function Classify
takes overdue_days as Int
gives Priority
do
if overdue_days >= 7
give Priority.urgent
else if overdue_days >= 3
give Priority.watch
else
give Priority.normal

Priority.urgent est une valeur de Priority, pas de Text. Une autre énumération peut déclarer un membre urgent sans devenir interchangeable : l'identité du type compte, pas seulement le nom du membre.

Aux frontières du programme​

Dans un argument ou résultat JSON typé, ce membre se représente par "urgent". Le runtime vérifie cette valeur contre l'énumération attendue. "critical" n'est pas accepté si ce membre n'a pas été déclaré. Une réponse de handler ou de provider reste soumise à ce contrôle.

Les comparaisons == et != portent sur des valeurs du même type enum. Les types enum peuvent être importés et utilisés dans des records, listes et optionnels.

Bien choisir le type​

  • Utilisez une enum pour un vocabulaire fermé relu avec le programme.
  • Utilisez Text pour du contenu libre, par exemple le message du ticket.
  • Utilisez Optional of Priority si la priorité peut réellement être absente, plutôt qu'un membre artificiel qui mélangerait absence et décision métier.

text(Priority.urgent) renvoie "urgent", le nom canonique du membre. La conversion fonctionne aussi pour une enum importée ; elle ne convertit pas une liste ou un optionnel. Déballez explicitement un optionnel avant conversion. Pour un libellé traduit, utilisez une fonction pure qui associe chaque membre au texte métier souhaité.

Sélection exhaustive​

match choisit une branche d'après la valeur nominale. Tous les membres sont obligatoires, une fois chacun. Ajouter un membre à l'enum fait donc signaler les sélections à compléter, y compris dans les modules consommateurs.

labels.tb
module examples.labels

enum Priority
normal
urgent

function Label
takes priority as Priority
gives Text
do
match priority
case Priority.normal
give "Normal"
case Priority.urgent
give "Urgent"

La valeur est évaluée une seule fois. Une seule branche s'exécute ; ses bindings restent locaux. Les appels, pauses humaines et limites conservent leurs contrôles habituels. Il n'y a ni cas par défaut ni conversion de texte en enum implicite. Pour des conditions numériques ou ouvertes, utilisez if.

Continuer​