Enums et correspondance de motifs en Rust

Rust fournit différents types de données pour effectuer des opérations, depuis les types de données de base comme les chaînes de caractères, les entiers et les nombres à virgule flottante jusqu’aux types de données composées comme les vecteurs et les tableaux, en passant par les types de données composées comme les structures et les énumérations.

Les énumérations sont un type de données qui permet de représenter un ensemble fixe de valeurs, comme les jours de la semaine et la couleur de l’arc-en-ciel. Les énumérations sont pratiques lorsque les valeurs possibles d’une variable sont limitées et connues.

Définition des Enums en Rust

La déclaration des enums en Rust est similaire à la déclaration des enums en C#. Vous utiliserez l’élément enum après le nom et un ensemble d’accolades pour définir les énumérations. Vous pouvez définir les variantes possibles (entités) à l’intérieur des accolades avec une virgule comme séparateur.

Voici une énumération pour les jours de la semaine :

Les jours de la semaine Jour de la semaine représente les jours de la semaine. L’enum variantes sont les noms des jours et n’ont pas de valeurs associées. Par ailleurs, les variantes de votre énumération peuvent être n’importe quel type de données Rust.

Vous pouvez accéder aux variantes en spécifiant le nom de la variante à l’aide du séparateur de chemin (: 🙂 sur l’énumération.

Le code spécifie que vous voulez accéder à l’enum Lundi de l’énumération des jours de la semaine.

Variantes et discriminants des Enums

Les variantes d’une énumération sont associées à des valeurs entières appelées discriminant. Par défaut, les valeurs de discriminant commencent à zéro et sont incrémentées de 1 pour les variantes suivantes ; il est toutefois possible de spécifier des valeurs de discriminant personnalisées pour chaque variante.

Voici un exemple d’énumération de jours de semaine avec des variantes auxquelles des valeurs sont attribuées.

L’énumération des jours de la semaine comporte sept variantes représentant chaque jour de la semaine, et une valeur (appelée discriminant) est attribuée à chaque jour. Les variantes sont classées dans l’ordre du premier au dernier jour de la semaine.

Voir aussi :  Construire une application React avec Radix UI

Vous pouvez accéder à la valeur du discriminant en utilisant le nom de la variante.

Les println ! est utilisée pour imprimer les discriminants. Chaque invocation de la macro println ! prend deux arguments : une chaîne de format et une valeur. La chaîne de formatage indique comment formater la sortie ; la valeur est la valeur réelle qui sera imprimée.

Dans ce cas, la chaîne de format est une chaîne littérale qui contient le nom du jour de la semaine, et la valeur est la variante de l’énumération avec un cast explicite vers l’élément i32 type entier.

La conversion explicite en i32 est nécessaire car les enums Rust sont représentés sous forme d’entiers, mais le type d’entier spécifique dépend de la taille de l’enum. Par défaut, Rust attribue le plus petit type d’entier qui peut représenter tous les discriminants de l’énumération. Mais dans ce cas, vous voulez imprimer les valeurs en tant qu’entiers i32, vous devez donc les convertir explicitement.

Voici le résultat de l’exécution de la commande principal fonction :

Correspondance de motifs en rouille

La correspondance de motifs est une construction de structure de contrôle Rust utile pour identifier des motifs de données. La correspondance de motifs permet d’écrire un code concis et efficace tout en utilisant des structures de données avancées ou en effectuant des opérations complexes.

Vous utiliserez la fonction match suivi du mot-clé => pour le motif et l’opération pour le motif, respectivement. Le motif peut être n’importe quelle expression Rust, y compris les littéraux, les variables et les appels de fonction.

Voici un exemple de déclaration de correspondance :

Les principal correspond à x par rapport à plusieurs motifs et imprime ensuite la valeur basée sur la valeur de x. Le motif de soulignement (_) est un motif de remplacement utilisé comme fourre-tout pour les cas qui ne sont pas explicitement traités.

Voir aussi :  Guide du débutant pour les images réactives en HTML

Enums et correspondance de motifs

Les enums et la correspondance de motifs sont utiles pour exprimer et travailler avec des structures de données avancées d’une manière efficace et sans risque pour les types. Vous pouvez utiliser les enums pour définir un ensemble fixe de valeurs et le filtrage pour travailler avec ces valeurs.

Voici une énumération des couleurs d’un arc-en-ciel :

Chaque variante de l’enum Arc-en-ciel représente une couleur de l’arc-en-ciel. Vous pouvez utiliser la correspondance de motifs avec l’instruction match pour faire correspondre des motifs à la variante afin de contrôler le flux du programme en fonction de la couleur de l’arc-en-ciel.

Voici une fonction qui prend en compte la variante de couleur de l’énumération Rainbow et imprime un message en fonction de la couleur.

Vous pouvez obtenir les variantes ne sont jamais construites ou des avertissements similaires lorsque vous tenterez d’exécuter le code ci-dessus, car les autres variantes, à l’exception de la variante bleue, n’ont jamais été construites dans ce code. Dans ce cas, vous pouvez donc ignorer ces avertissements car ils sont intentionnels.

Les print_color prend en compte un paramètre de couleur du type Rainbow enum. L’instruction match fait correspondre la couleur à une série de couleurs accessibles via les noms de variantes. Enfin, le message est imprimé en fonction de la couleur correspondante.

Vous pouvez utiliser la correspondance de motifs pour des opérations complexes telles que des valeurs de retour multiples basées sur une condition.

Les calculer_longueur d’onde prend en paramètre une variante de couleur du type Rainbow enum et renvoie un entier 32 bits non signé correspondant à la longueur d’onde de la couleur qui correspond au motif.

Rust fournit également des structures pour créer des types personnalisés

Les Enums sont pratiques pour définir des types personnalisés pour plusieurs opérations, en particulier dans les cas où les champs sont connus et définis.

Voir aussi :  5 macros Microsoft Excel sympas pour trier les données

Rust fournit également des structs que vous pouvez utiliser pour créer des types personnalisés avec des champs nommés. Contrairement aux enums, les structs vous permettent de définir des champs de différents types auxquels vous pouvez accéder et que vous pouvez modifier individuellement.

S’abonner à la newsletter

Comment faire correspondre un enum en Rust ?

Ajouter des données aux variantes d’enum

  • Création d’une nouvelle instance de l’enum et affectation à une variable.
  • Placez cette variable dans une déclaration de correspondance.
  • Destructure le contenu de chaque variante de l’énumération dans une variable de l’instruction match.
  • Utilisation de la variable déstructurée dans le bloc de code à droite du motif.

Est-ce qu’il y a du pattern matching en Rust ?

Les patterns sont une syntaxe spéciale en Rust pour faire correspondre la structure des types, à la fois complexes et simples. L’utilisation de motifs en conjonction avec des expressions de correspondance et d’autres constructions vous donne plus de contrôle sur le flux de contrôle d’un programme.

Que sont les structs et les enums en Rust ?

Une structure possède plusieurs champs. En revanche, un enum a plusieurs variantes. Mais, alors que la valeur concrète d’un type struct a plusieurs champs, une valeur concrète d’un type enum est exactement une variante. Les enums vous permettent de construire des types plus clairs et de diminuer le nombre d’états illégaux que vos données peuvent prendre.

Pourquoi les enums de Rust sont-ils si efficaces ?

Les enums sont un outil puissant en Rust, vous permettant de définir un type avec un ensemble fixe de valeurs, chacune avec ses propres données. Elles sont souvent utilisées pour représenter un choix entre un ensemble limité d’options ou pour représenter des données avec un ensemble fixe de types possibles.

Cliquez pour évaluer cet article !
[Total: Moyenne : ]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *