0Pricing
Learn Rust Coding · Lektion

Referenzen und Borrowing erklärt

Lernen Sie Referenzen und Borrowing kennen, mit denen mehrere Teile Ihres Codes sicher auf Daten zugreifen können, ohne deren Ownership zu übernehmen.

Referenzen und Borrowing erklärt ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 2 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn Rust Coding-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn Rust Coding-Kurs umfasst insgesamt 3 Lektionen.

Was sind Referenzen?

In Rust besitzen Variablen ihre Daten. Doch was ist, wenn andere Teile Ihres Codes diese Daten ansehen oder sogar ändern sollen, ohne die Ownership zu übernehmen?

Hier kommen Referenzen ins Spiel! Eine Referenz ist wie ein Zeiger auf einen Wert, unterliegt jedoch strengen Regeln, die vom Rust-Compiler durchgesetzt werden.

Stellen Sie sich vor, Sie betrachten etwas durch ein Fenster, anstatt den Gegenstand selbst zu besitzen.

Ihre erste Referenz

Wir erstellen eine Referenz mit dem Operator &. Dadurch entsteht ein nicht besitzender Zeiger auf einen Wert. Sehen wir uns das in Aktion an:

fn print_length(s: &String) {
  println!("The length is: {}", s.len());
}

fn main() {
  let message = String::from("Hello, CoddyKit!");
  print_length(&message); // Pass a reference
  println!("Original message still here: {}", message);
}

Borrowing verstehen

Wenn Sie eine Referenz auf einen Wert erstellen, leihen Sie diesen Wert aus. Der Besitzer bleibt weiterhin Besitzer, aber Sie erhalten vorübergehenden Zugriff.

  • Ausleihen statt Übergeben: Sie können die ausgeliehenen Daten verwenden.
  • Keine Übertragung der Ownership: Die ursprüngliche Variable besitzt die Daten weiterhin und verwirft sie, wenn sie ihren Gültigkeitsbereich verlässt.
  • Sicherheit an erster Stelle: Die Borrowing-Regeln von Rust verhindern häufige Programmierfehler wie Data Races.

Unveränderliche Ausleihen: Nur-Lese-Zugriff

Standardmäßig sind Referenzen in Rust unveränderlich. Das bedeutet, dass Sie die Daten, auf die sie verweisen, lesen, aber nicht ändern können.

Dies ist ein wichtiges Sicherheitsmerkmal! Wenn mehrere Teile Ihres Codes Lesezugriff haben, können sie nicht versehentlich die Daten der jeweils anderen beeinflussen.

Unveränderliches Ausleihen in der Praxis

Hier nimmt die Funktion calculate_sum eine unveränderliche Referenz auf einen Vektor entgegen. Sie kann die Elemente lesen, aber keine hinzufügen oder entfernen.

fn calculate_sum(numbers: &Vec<i32>) -> i32 {
  let mut total = 0;
  for num in numbers {
    total += num;
  }
  total
}

fn main() {
  let my_numbers = vec![10, 20, 30, 40];
  let sum = calculate_sum(&my_numbers); // Immutable borrow
  println!("The sum is: {}", sum);
  println!("Original vector: {:?}", my_numbers);
}

Veränderbare Borrows: Daten ändern

Manchmal müssen Sie geliehene Daten ändern. Dafür verwenden Sie eine veränderbare Referenz, dargestellt durch &mut.

Für veränderbare Referenzen gilt eine wichtige Regel: Zu einem bestimmten Zeitpunkt darf es nur eine veränderbare Referenz auf einen bestimmten Datenabschnitt geben. Dadurch werden Data Races verhindert und die Sicherheit gewährleistet.

Daten mit &mut ändern

Die Funktion add_suffix nimmt eine veränderbare Referenz auf einen String entgegen. Sie kann den ursprünglichen String direkt ändern.

fn add_suffix(text: &mut String) {
  text.push_str(" (modified)");
}

fn main() {
  let mut my_string = String::from("Original text");
  add_suffix(&mut my_string); // Mutable borrow
  println!("Modified string: {}", my_string);
}

Die goldenen Regeln des Borrowing

Der Compiler von Rust setzt diese Regeln bereits zur Compilezeit durch, um Speichersicherheit zu garantieren:

  • Sie dürfen gleichzeitig eine veränderbare Referenz auf einen Datenabschnitt haben.
  • ODER Sie dürfen gleichzeitig beliebig viele unveränderbare Referenzen haben.
  • Solange aktive unveränderbare Referenzen vorhanden sind, dürfen Sie keine veränderbare Referenz haben.
  • Referenzen müssen immer gültig sein (sie dürfen die Daten, auf die sie verweisen, nicht überleben).

Diese Regeln verhindern Data Races und sorgen dafür, dass Ihre Programme sicher und vorhersehbar sind.

Konfligierende Borrows

Dieser Code versucht, gleichzeitig eine unveränderbare und eine veränderbare Referenz auf my_value zu erstellen. Das verstößt gegen die Borrowing-Regeln von Rust. Der Code wird NICHT kompiliert.

Versuchen Sie, ihn auszuführen, und sehen Sie sich die Fehlermeldung des Compilers an!

fn main() {
  let mut my_value = 100;

  let r1 = &my_value; // Immutable reference
  let r2 = &mut my_value; // Mutable reference (problem here!)

  println!("r1: {}", r1);
  // println!("r2: {}", r2); // This line would also cause an error if uncommented
}

Verständnis überprüfen

Betrachten Sie den folgenden Rust-Codeausschnitt:

fn process_data(data: &mut Vec<i32>) {
  data.push(4);
}

fn main() {
  let mut numbers = vec![1, 2, 3];
  let first_ref = &numbers[0]; // Line A
  process_data(&mut numbers); // Line B
  println!("First element: {}", first_ref); // Line C
}

Welche Zeile(n) verursachen aufgrund der Borrowing-Regeln von Rust einen Fehler zur Compilezeit?

Zusammenfassung: Referenzen und Borrowing

Sehr gut! Sie haben die Grundlagen von Referenzen und Borrowing in Rust gelernt:

  • Referenzen (&) ermöglichen den Zugriff auf Daten, ohne deren Besitz zu übernehmen.
  • Borrowing bezeichnet das Erstellen einer Referenz, also das Verleihen des Zugriffs auf Daten.
  • Unveränderbare Referenzen (&) ermöglichen schreibgeschützten Zugriff.
  • Veränderbare Referenzen (&mut) ermöglichen Lese- und Schreibzugriff.
  • Die strengen Borrowing-Regeln von Rust (eine veränderbare ODER viele unveränderbare Referenzen) verhindern Data Races und gewährleisten die Speichersicherheit zur Compilezeit.

Diese Konzepte sind entscheidend, um sicheren und effizienten Rust-Code zu schreiben!

Häufig gestellte Fragen

Ist die Lektion „Referenzen und Borrowing erklärt“ kostenlos?

Ja — der vollständige Text von „Referenzen und Borrowing erklärt“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn Rust Coding-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn Rust Coding-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Referenzen und Borrowing erklärt“?

Lernen Sie Referenzen und Borrowing kennen, mit denen mehrere Teile Ihres Codes sicher auf Daten zugreifen können, ohne deren Ownership zu übernehmen. Du übst Learn Rust Coding mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Learn Rust Coding zu starten?

Keine Vorkenntnisse erforderlich. Learn Rust Coding auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 3.

Wie lange dauert die Lektion „Referenzen und Borrowing erklärt“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Learn Rust Coding-Lektion Code schreiben und ausführen?

Ja. Jede Learn Rust Coding-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Das Ownership-Modell von Rust verstehen
  2. Referenzen und Borrowing erklärt
  3. Lifetimes für sichere Referenzen
← Zurück zu Learn Rust Coding