enum |
Enumération |
|---|---|
| Rust | |
Syntaxe
|
enum NomDeLEnum { Variante1, Variante2, Variante3, } |
Paramètres
| Nom | Description |
|---|---|
| NomDeLEnum | Ce paramètre permet de spécifier le nom de l'énumération que l'on souhaite définir. |
| Variante1, Variante2, Variante3 | Ces paramètres permettent de définir les différentes variantes ou cas possibles que l'énumération peut prendre. Chaque variante peut éventuellement contenir des données associées. |
Description
Ce mot réservé permet de définir une énumération.
Remarques
Un type pouvant être l'une de ses nombreuses variantes.
Les énumérations en Rust sont similaires à celles d'autres langages compilés comme le C, mais présentent des différences importantes qui les rendent considérablement plus puissantes. Ce que Rust appelle des énumérations est plus communément appelé «types de données algébriques» si vous venez de la programmation fonctionnelle. Le détail important est que chaque variante d'énumération peut être associée à des données.
- enum SimpleEnum {
- FirstVariant,
- SecondVariant,
- ThirdVariant,
- }
-
- enum Location {
- Unknown,
- Anonymous,
- Known(Coord),
- }
-
- enum ComplexEnum {
- Nothing,
- Something(u32),
- LotsOfThings {
- usual_struct_stuff: bool,
- blah: String,
- }
- }
-
- enum EmptyEnum { }
La première énumération présentée est celle que l'on trouve habituellement dans un langage de type C. La seconde illustre un exemple hypothétique de stockage de données de localisation, Coord étant tout autre type requis, par exemple une structure. Le troisième exemple illustre le type de données qu'une variante peut entreposer, allant de rien à un tuple, en passant par une structure anonyme.
L'instanciation de variantes d'énumération implique l'utilisation explicite du nom de l'énumération comme espace de noms, suivi de l'une de ses variantes. SimpleEnum::SecondVariant en est un exemple. Lorsque des données suivent une variante, comme avec le type Option intégré de Rust, les données sont ajoutées conformément à la description du type, par exemple Option::Some(123). Il en va de même pour les variantes de type structure, avec des éléments ressemblant à ComplexEnum::LotsOfThings { usual_struct_stuff: true, blah: "hello!".to_string(), }. Les énumérations vides sont similaires à ! dans la mesure où ils ne peuvent pas être instanciés du tout et sont principalement utilisés pour perturber le système de types de manière intéressante.