Types énumérés

Les types énumérés permettent de définir un type ordinal, pouvant prendre une valeur parmis un ensemble fini de valeurs.

Déclaration

Portée et visibilité des éléments

Les types énumérés peuvent être déclarés avec ou sans portée globale. Ils sont déclarés et utilisés comme suit:

type
   MonEnumere = enum (Premier, Second, Troisieme);

   var e := MonEnumere.Second; // élément qualifié

Les éléments auront une portée globale si la syntaxe Pascal classique est utilisée. Ils pourront toutefois être qualifié, mais cela n'est pas obligatoire. Dans ce cas, il est recommandé de préfixer les éléments avec les initiales du type en minuscule:

type
   TMonEnumere = (mePremier, meSecond, meTroisieme);

   var e := meSecond; // portée globale
   var e := TMonEnumere.meSecond; // élément qualifé

Valeur numérique des éléments

Par défaut chaque élément de l'ensemble énuméré se verra affecté une valeur entière (0, 1, 2...), il est aussi possible de spécifier explicitement une valeur pour chacun des éléments:

type
   Premiers = enum (Un = 1, Trois = 3, Cinq = 5);

Un type d'énuméré spécial est déclaré avec le mot-clef flags:

type
   MyFlags = flags (a, b, c, d);

Quand flags est utilisé, les valeurs ne peuvent pas être spécifiées et sont prise dans le série des puissances de deux (1, 2, 4, 8...)

Méthodes d'un type énuméré

Les valeurs mini et maxi d'un type énumérés peuvent être obtenus par les fonctions Low() et High(), ou par les pseudo-méthodes Low et High (Qubes 6.3).

PrintLn(Low(MyFlags));
PrintLn(MyFlags.Low()); // supporté à partir de Qubes 6.3

Il est possible d'obtenir un élément par son nom avec la pseudo-méthode ByName() (Qubes 9.0), la recherche n'est pas sensible à la casse et accepte le nom simple ou le nom qualifié. Si aucun élément ne correspond, retourne la valeur par défaut de l'énuméré.

type TEnum = (alpha, beta);
var e := TEnum.ByName('beta');
PrintLn(e.Value); // 1

Propriétés

Les éléments d'une énumération disposent (Qubes 6.2) des propriétés suivantes:

  • Name : retourne le nom de l'élément (préfixe du type pour enum et flags)
  • QualifiedName : retourne le nom de l'élément systématiquement préfixé du type
  • Value : retourne la valeur de l'élément (elem.Value est équivalent à Ord(elem))

Ensembles

Les types énumérés peuvent aussi être utilisés pour définir des types ensembles.