Menu
Coddy logo textTech

Parametr self

Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 2 z 61.

Gdy metoda musi uzyskać dostęp do danych przechowywanych w instancji struktury, używa parametru &self. Ten specjalny parametr jest zawsze pierwszym argumentem metody i reprezentuje referencję do instancji, na której wywołano metodę.

Symbol & oznacza, że pożyczamy instancję, zamiast przejmować nad nią własność. Dzięki temu metoda może odczytywać pola struktury bez zużywania instancji:

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
    }
}

Wewnątrz ciała metody self daje ci dostęp do wszystkich pól struktury za pomocą notacji kropkowej. Metoda area odczytuje zarówno width, jak i height, aby obliczyć i zwrócić wynik.

Ponieważ &self jedynie pożycza instancję, możesz bez problemu wywołać kilka metod tej samej struktury:

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

Metody korzystające z &self są tylko do odczytu. Mogą analizować dane struktury, ale nie mogą ich zmieniać. W następnej lekcji dowiesz się, jak tworzyć metody, które mogą modyfikować instancję.

challenge icon

Wyzwanie

Łatwy

Utwórz strukturę Circle z jednym polem: radius (f64).

Dodaj blok implementacji dla Circle z dwiema metodami, które używają &self:

  • circumference: zwraca obwód jako f64 (wzór: 2.0 * 3.14159 * radius)
  • diameter: zwraca średnicę jako f64 (wzór: 2.0 * radius)

Otrzymasz jedno wejście:

  • Promień okręgu (f64)

Utwórz instancję Circle z podanym promieniem, a następnie wypisz obwód i średnicę w osobnych wierszach.

Oczekiwany format wyjściowy:

{circumference}
{diameter}

Spróbuj swoich sił

use std::io;

// TODO: Zdefiniuj tutaj strukturę Circle


// TODO: Dodaj blok implementacji dla Circle z metodami obliczającymi obwód i średnicę


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: Utwórz instancję Circle i wypisz obwód oraz średnicę
    
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Rust online