Menu
Coddy logo textTech

Der Self-Parameter

Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 2 von 61.

Wenn eine Methode auf die in einer Struct-Instanz gespeicherten Daten zugreifen muss, verwendet sie den Parameter &self. Dieser spezielle Parameter ist in einer Methode immer das erste Argument und stellt eine Referenz auf die Instanz dar, für die die Methode aufgerufen wird.

Das Symbol & bedeutet, dass wir uns die Instanz ausleihen, anstatt ihren Besitz zu übernehmen. Dadurch kann die Methode die Felder der Struktur lesen, ohne die Instanz zu verbrauchen:

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
    
    fn is_square(&self) -> bool {
        self.width == self.height
    }
}

Im Methodenrumpf ermöglicht dir self den Zugriff auf alle Felder des struct mithilfe der Punktnotation. Die area-Methode liest sowohl width als auch height, um das Ergebnis zu berechnen und zurückzugeben.

Da &self die Instanz nur ausleiht, kannst du mehrere Methoden auf derselben Struktur problemlos aufrufen:

fn main() {
    let rect = Rectangle { width: 10, height: 5 };
    
    println!("Area: {}", rect.area());      // 50
    println!("Square? {}", rect.is_square()); // false
}

Methoden mit &self sind schreibgeschützt. Sie können die Daten der Struktur untersuchen, aber sie nicht ändern. In der nächsten Lektion lernst du, wie du Methoden erstellst, die die Instanz ändern können.

challenge icon

Aufgabe

Einfach

Erstelle eine Circle-Struktur mit einem einzigen Feld: radius (f64).

Füge einen Implementierungsblock für Circle mit zwei Methoden hinzu, die &self verwenden:

  • circumference: gibt den Umfang als f64 zurück (Formel: 2.0 * 3.14159 * radius)
  • diameter: gibt den Durchmesser als f64 zurück (Formel: 2.0 * radius)

Du erhältst eine Eingabe:

  • Der Radius des Kreises (f64)

Erstelle eine Circle-Instanz mit dem angegebenen Radius und gib anschließend den Umfang und den Durchmesser in separaten Zeilen aus.

Erwartetes Ausgabeformat:

{circumference}
{diameter}

Probier es selbst

use std::io;

// TODO: Definiere die Circle-Struktur hier


// TODO: Füge den Implementierungsblock für Circle mit den Methoden circumference und diameter hinzu


fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let radius: f64 = input.trim().parse().expect("Invalid number");
    
    // TODO: Erstelle eine Circle-Instanz und gib circumference und diameter aus
    
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Rust-Compiler