Menu
Coddy logo textTech

Cecha Display

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

Chociaż Debug świetnie sprawdza się w przypadku programistów analizujących dane, cecha Display jest przeznaczona do wyświetlania informacji użytkownikom. To ona odpowiada za formatator {} w println!. W przeciwieństwie do Debug, Rust nie może automatycznie wyprowadzić cechy Display. Musisz zaimplementować ją ręcznie.

Aby zaimplementować Display, musisz zaimportować moduł fmt i zaimplementować metodę fmt:

use std::fmt;

struct Temperature {
    celsius: f64,
}

impl fmt::Display for Temperature {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}°C", self.celsius)
    }
}

Metoda fmt przyjmuje Formatter i zwraca fmt::Result. Użyj makra write!, aby sformatować wynik, uzyskując dostęp do pól struktury za pośrednictwem self.

Teraz możesz wyświetlić strukturę za pomocą standardowego formatera {}:

let temp = Temperature { celsius: 23.5 };
println!("{}", temp);  // 23.5°C

Kluczowa różnica: wynik Debug pokazuje strukturę danych (przydatne podczas debugowania), natomiast wynik Display jest dopracowany i przeznaczony dla użytkowników końcowych. Struktura może implementować oba: użyj {:?} do debugowania i {} do czytelnego wyniku.

challenge icon

Wyzwanie

Łatwy

Stwórzmy przyjazny dla użytkownika system wyświetlania produktów! Podczas gdy Debug pokazuje surową strukturę Twoich danych, cecha Display pozwala tworzyć dopracowane, czytelne dla ludzi dane wyjściowe, idealne dla użytkowników końcowych.

Rozmieścisz swój kod w dwóch plikach:

  • product.rs: Zdefiniuj publiczną strukturę Product z dwoma publicznymi polami: name (String) i price (f64). Zaimplementuj cechę Display dla swojej struktury, tak aby formatowała dane jako {name} - ${price}. Pamiętaj, aby zaimportować std::fmt i użyć makra write! wewnątrz metody fmt.
  • main.rs: Zaimportuj moduł produktu i utwórz instancję Product przy użyciu podanych danych wejściowych. Wypisz produkt za pomocą standardowego formatera {}, aby wyświetlić własny format.

Cecha Display wymaga ręcznej implementacji metody fmt: Rust nie może wyprowadzić jej automatycznie tak jak Debug. Dzięki temu masz pełną kontrolę nad tym, jak Twój typ jest przedstawiany użytkownikom.

Dane wyjściowe powinny wyświetlać produkt w przejrzystym, przyjaznym dla użytkownika formacie:

{name} - ${price}

Na przykład dla danych wejściowych Wireless Mouse i 29.99:

Wireless Mouse - $29.99

Otrzymasz dwa dane wejściowe: nazwę produktu i cenę (odczytaj jako f64).

Spróbuj swoich sił

mod product;

use product::Product;

fn main() {
    let mut name = String::new();
    std::io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();

    let mut price_input = String::new();
    std::io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");

    // TODO: Utwórz instancję Product z podaną nazwą i ceną

    // TODO: Wypisz produkt, używając formatera {}
}
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