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:
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:
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:
Premiers = enum (Un = 1, Trois = 3, Cinq = 5);
Un type d'énuméré spécial est déclaré avec le mot-clef flags:
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(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é.
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.