Menu
Coddy logo textTech

Wprowadzenie do bloków implementacji

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

W Rust struktury określają, jakie dane przechowuje dany typ, ale nie określają, co ten typ potrafi robić. Aby nadać strukturze zachowanie, używamy bloków implementacji ze słowem kluczowym impl.

Blok implementacji łączy funkcje (nazywane metodami) z konkretną strukturą. Oto podstawowa struktura:

struct Dog {
    name: String,
    age: u8,
}

impl Dog {
    fn bark(&self) {
        println!("{} says woof!", self.name);
    }
}

Blok impl Dog informuje Rust, że wszystko, co znajduje się w środku, należy do struktury Dog. Taki podział pozwala zachować przejrzystość definicji danych, a jednocześnie dodawać dowolną liczbę metod w bloku implementacji.

Aby wywołać metodę, użyj notacji kropkowej na instancji:

fn main() {
    let my_dog = Dog {
        name: String::from("Rex"),
        age: 3,
    };
    
    my_dog.bark(); // Wynik: Rex mówi hau!
}

Ten wzorzec oddzielania danych (struktury) od zachowania (bloku impl) ma fundamentalne znaczenie dla organizacji kodu Rust. W kolejnych lekcjach przyjrzymy się temu, jak metody uzyskują dostęp do danych struktury za pomocą parametru &self, który widzisz w powyższym przykładzie.

challenge icon

Wyzwanie

Łatwy

Utwórz strukturę Cat z dwoma polami: name (String) i lives (u8).

Dodaj blok implementacji dla Cat z metodą o nazwie meow, która przyjmuje &self i wypisuje imię kota, a po nim " says meow!".

Otrzymasz dwa wejścia:

  • Pierwsza linia: imię kota (String)
  • Druga linia: liczba żyć (u8)

Utwórz instancję Cat z podanymi wartościami i wywołaj na niej metodę meow.

Oczekiwany format wyjścia:

{name} says meow!

Spróbuj swoich sił

use std::io;

// TODO: Zdefiniuj strukturę Cat z polami 'name' (String) i 'lives' (u8)


// TODO: Dodaj blok implementacji dla Cat z metodą 'meow'


fn main() {
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    let mut lives_input = String::new();
    io::stdin().read_line(&mut lives_input).expect("Failed to read line");
    let lives: u8 = lives_input.trim().parse().expect("Failed to parse lives");
    
    // TODO: Utwórz instancję Cat i wywołaj metodę meow
    
}
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