</>
Plan du cours — 11/66

Borrowing : les références

Débutant

Une référence emprunte une valeur sans en prendre la propriété.

fn longueur(s: &String) -> usize { s.len() }

fn ajouter_point(s: &mut String) { s.push('.'); }

let mut texte = String::from("fin");
let n = longueur(&texte);      // référence partagée (&)
ajouter_point(&mut texte);     // référence exclusive (&mut)

La règle d'or des emprunts#

À un instant donné, on peut avoir :

  • soit plusieurs références partagées &T (lecture seule),
  • soit une seule référence mutable &mut T.

Jamais les deux en même temps. Cela élimine les data races dès la compilation.

let mut v = vec![1, 2, 3];
let premier = &v[0];
// v.push(4);          // ❌ erreur : v est emprunté en lecture par "premier"
println!("{premier}");
v.push(4);             // ✅ "premier" n'est plus utilisé, l'emprunt est terminé

Astuce : préférez &str à &String et &[T] à &Vec<T> dans les paramètres de fonction — vos fonctions acceptent alors plus de types d'entrée.