Section courante

A propos

Section administrative du site

for

Pour
Rust

Syntaxe

for variable in expression_iterable {
   // corps de la boucle
}

Paramètres

Nom Description
variable Ce paramètre permet de recevoir, à chaque itération, un élément extrait de l'itérateur spécifié.
expression_iterable Ce paramètre permet de désigner un objet implémentant le trait IntoIterator, sur lequel la boucle itère.
corps de la boucle Ce paramètre permet de regrouper les instructions qui seront exécutées à chaque passage dans la boucle.

Description

Ce mot réservé permet d'indiquer une boucle sur les éléments d'un itérateur, mettant en oeuvre un trait ou spécifie une durée de vie de rang supérieur.

Remarques

Itération avec in, implémentation de trait avec impl ou limites de trait de rang supérieur (for<'a>).

Le mot clef for est utilisé dans de nombreux contextes syntaxiques :

Les boucles for-in, ou plus précisément les boucles d'itérateur, sont une simple variante syntaxique d'une pratique courante en Rust, consistant à boucler sur tout ce qui implémente IntoIterator jusqu'à ce que l'itérateur renvoyé par .into_iter() renvoie None (ou que le corps de la boucle utilise break).

  1. for i in 0..5 {
  2.     println!("{}", i * 2);
  3. }
  4.  
  5. for i in std::iter::repeat(5) {
  6.     println!("il s'avère que {i} ne cesse jamais d'avoir 5 ans");
  7.     break; // sinon cela tournerait en boucle pour toujours
  8. }
  9.  
  10. 'outer: for x in 5..50 {
  11.     for y in 0..10 {
  12.         if x == y {
  13.             break 'outer;
  14.         }
  15.     }
  16. }

Comme illustré dans l'exemple ci-dessus, les boucles for (comme toutes les autres boucles) peuvent être étiquetées, en utilisant une syntaxe similaire à celle des boucles de durée de vie (similaire visuellement, mais totalement distincte en pratique). Donner la même étiquette à break interrompt la boucle étiquetée, ce qui est utile pour les boucles internes. Il ne s'agit certainement pas d'un goto.

Une boucle for se développe comme suit :

  1. for loop_variable in iterator {
  2.     code()
  3. }
  4.  
  5. {
  6.     let result = match IntoIterator::into_iter(iterator) {
  7.         mut iter => loop {
  8.             match iter.next() {
  9.                 None => break,
  10.                 Some(loop_variable) => { code(); },
  11.             };
  12.         },
  13.     };
  14.     result
  15. }


Dernière mise à jour : Vendredi, le 1er Août 2025