Teil 13: Borrowing und Referenzen
Lernziel: Daten ausleihen statt kopieren.
Voraussetzungen: Die vorherigen Lektionen, insbesondere Teil 12.
Worum geht es?
Mit & kannst du auf Daten zugreifen, ohne ihren Besitz zu übernehmen. Das nennt Rust Borrowing.
Schritt für Schritt
fn zeige_name(name: &str) {
println!("Drucker: {name}");
}
fn main() {
let name = String::from("Neptune 4");
zeige_name(&name);
println!("Weiterhin vorhanden: {name}");
}
Die Funktion erhält eine unveränderliche Referenz auf die String-Daten. Für Veränderungen brauchst du eine veränderliche Referenz:
fn ergaenze(name: &mut String) {
name.push_str(" Plus");
}
let mut modell = String::from("Neptune 4");
ergaenze(&mut modell);
Wichtigste Regel
Während eine veränderliche Referenz auf denselben Wert aktiv ist, darf es keine konkurrierende Verwendung geben, die die Referenzregeln verletzt. Rust prüft dies beim Kompilieren.
Slices
&str ist ein Slice, also eine Ansicht auf Textdaten. Für Arrays und Vektoren gibt es &[T], beispielsweise &[f64]. Bei Text-Slices müssen Grenzen gültige UTF-8-Zeichengrenzen sein.
Selbst ausprobieren
Schreibe eine Funktion laenge(text: &str) -> usize, die die Anzahl der Unicode-Zeichen zurückgibt, ohne den String zu übernehmen.
Musterlösung anzeigen
fn laenge(text: &str) -> usize {
text.chars().count()
}
fn main() {
let name = String::from("Drucker A");
println!("{} Zeichen", laenge(&name));
println!("{name}");
}
Das solltest du mitnehmen
- Daten ausleihen statt kopieren.
- Nutze
cargo runfür das Ausführen undcargo checkfür eine schnelle Fehlerprüfung (ab Teil 4). - Experimentiere mit veränderten Werten und beobachte die Compilermeldungen.
