Prêter une donnée. La regarder sans la posséder.Lend a value. Look at it without owning it.
Le numéro précédent finissait sur une promesse : avant de cloner, demande-toi si tu voulais seulement lire. Voici la réponse. Un emprunt — une référence, le & — donne accès à une donnée sans en transférer la possession. La fonction lit, le propriétaire d'origine garde tout. Pas de move, pas de clone, pas d'allocation.The previous issue ended on a promise: before cloning, ask whether you only meant to read. Here's the answer. A borrow — a reference, the & — gives access to a value without transferring its ownership. The function reads, the original owner keeps everything. No move, no clone, no allocation.
fn longueur(s: &String) -> usize { // & : on EMPRUNTE, on ne possède pas s.len() } // s sort de portée, mais ne droppe rien let nom = String::from("Ada"); let n = longueur(&nom); // on prête nom le temps de l'appel println!("{nom} fait {n} lettres"); // nom est toujours à nous
"Ada"owns "Ada"La référence &nom pointe vers la donnée mais ne la possède pas : quand elle disparaît, rien n'est libéré. nom reste l'unique propriétaire.The reference &nom points to the data but doesn't own it: when it disappears, nothing is freed. nom stays the sole owner.
&T — emprunt partagé : pour lire. On peut en avoir autant qu'on veut en même temps. &mut T — emprunt exclusif : pour muter. Il ne peut y en avoir qu'un, et aucun autre accès pendant ce temps. Toute la suite tient dans la tension entre ces deux-là.&T — shared borrow: to read. You can have as many as you like at once. &mut T — exclusive borrow: to mutate. There can be only one, and no other access while it lives. Everything that follows fits in the tension between these two.
« Cette donnée — je la lis, ou je la mute ? Et combien d'accès en même temps ? » La réponse choisit la référence : & pour lire à plusieurs, &mut pour muter seul. Se tromper de réponse, c'est le combat contre le borrow checker.'This data — am I reading it, or mutating it? And how many accesses at once?' The answer picks the reference: & to read with others, &mut to mutate alone. Getting the answer wrong is the fight against the borrow checker.