Menu
Coddy logo textTech

Emprunt dans une boucle

Fait partie de la section Fundamentals du Journey Rust de Coddy — leçon 67 sur 75.

Lorsque nous écrivons une boucle en Rust, nous avons deux manières principales de travailler avec nos données : nous pouvons les consulter (en utilisant &) ou les prendre. Par exemple, considérons les données suivantes :

let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;

Méthode 1 : Consulter les données (en utilisant &) :

for number in &numbers {
    sum += number;
}
println!("I can use it here: {:?}", numbers);

Méthode 2 : Prendre les données (sans &) :

for number in numbers {
    sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// Cela provoquerait une erreur

Pensez-y de cette façon :

  1. Utiliser & c'est comme regarder un album photo : vous pouvez voir toutes les photos, mais l'album reste intact
  1. Ne pas utiliser & c'est comme retirer les photos : vous pouvez les utiliser, mais l'album sera vide après

Maintenant ce style :

for num in numbers.iter() {}

Est semblable à ceci :

for num in &numbers {}

Et une boucle de mutation :

for num in numbers.iter_mut() { 
    *num *= 2;
}

Peut également s'écrire ainsi :

for num in &mut numbers { 
    *num *= 2;
}

Aide-mémoire

Dans les boucles Rust, vous pouvez soit consulter les données (en utilisant &), soit en prendre possession :

Consulter les données (emprunt) :

let numbers = vec![1, 2, 3, 4, 5];
for number in &numbers {
    sum += number;
}
// numbers peut encore être utilisé après la boucle

Prendre possession :

let numbers = vec![1, 2, 3, 4, 5];
for number in numbers {
    sum += number;
}
// numbers ne peut plus être utilisé après la boucle

Méthodes d'itérateur :

// Ceux-ci sont équivalents :
for num in numbers.iter() {}
for num in &numbers {}

// Pour la mutation :
for num in numbers.iter_mut() { *num *= 2; }
for num in &mut numbers { *num *= 2; }

Essayez vous-même

Cette leçon ne comprend pas de défi de code.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fundamentals