Considérations théoriques

Reprenons cette ligne issue du chapitre Les vecteurs en langage Rust :

vecteur_entiers.retain(|&x| x % 2 == 0); 

La méthode retain attend une lambda-expression (une closure), qui lui permet de garder les éléments du vecteur qui répondent à un certain critère. retain

Entre les deux barres verticales « | | », on représente une référence vers un élément du vecteur. On ne conservera que ceux qui répondent au critère, en l’occurrence celui d’être un nombre pair, exprimé par x % 2 == 0.

Si on essaie de définir une closure en Rust, on dira qu’elle correspond à ce que l’on appelle, dans divers langages, une fonction anonyme. Cela peut par exemple évoquer LINQ en langage C#. Plusieurs usages sont à noter : Closure

  • Stocker cette fonction anonyme dans une simple variable, pour réutilisation.

  • Passer cette fonction anonyme en paramètre d’une autre fonction, comme par exemple avec retain.

Un avantage comparatif important des closures est qu’elles ont accès à des valeurs définies dans la portée dans laquelle elles sont définies. Au contraire, une simple fonction peut manipuler des paramètres qui lui sont passés, mais n’aura pas nécessairement accès à certaines variables de la portée dans laquelle elle est définie.

Précisons un point linguistique :...

Pour consulter la suite, découvrez le livre suivant :
couv_EIRUST.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Introduction
Suivant
Première utilisation d'une closure