Powtórka – punkt do wydrukowania
Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 39 z 61.
Wyzwanie
ŁatwyZbierzmy wszystkie standardowe cechy, których się nauczyłeś, tworząc w pełni funkcjonalną strukturę Point, którą można debugować, czytelnie wyświetlać i porównywać pod kątem równości!
Podzielisz swój kod na dwa pliki:
point.rs: Zdefiniuj publiczną strukturęPointz publicznymi polamixiy(oba typui32). Twoja struktura Point powinna obsługiwać trzy możliwości:- Wyświetlanie w trybie debugowania za pomocą
{:?}. Wyprowadź tę cechę automatycznie - Przyjazne dla użytkownika wyświetlanie za pomocą
{}w formacie(x, y): zaimplementuj je ręcznie przy użyciustd::fmt::Display - Porównywanie równości za pomocą
==: wyprowadź cechęPartialEq
- Wyświetlanie w trybie debugowania za pomocą
main.rs: Dołącz moduł point i utwórz dwie instancjePointprzy użyciu podanych danych wejściowych. Zademonstruj wszystkie trzy możliwości, wyświetlając pierwszy punkt w formacie debugowania, wyświetlając drugi punkt w formacie Display i porównując, czy oba punkty są równe.
Wynik powinien pokazywać działanie wszystkich trzech możliwości cech:
Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}Na przykład dla danych wejściowych 3, 5, 3, 5:
Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: trueA dla danych wejściowych 10, 20, 5, 15:
Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: falseOtrzymasz cztery dane wejściowe: współrzędne x i y pierwszego punktu, a następnie współrzędne x i y drugiego punktu. Każdą z nich sparsuj jako i32.
Spróbuj swoich sił
mod point;
use point::Point;
fn main() {
// Wczytaj cztery wartości: x1, y1, x2, y2
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x2: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y2: i32 = input.trim().parse().expect("Invalid input");
// TODO: Utwórz dwie instancje Point na podstawie wczytanych wartości
// TODO: Wypisz pierwszy punkt w formacie debugowania {:?}
// Format: "Debug: Point { x: ..., y: ... }"
// TODO: Wypisz drugi punkt w formacie wyświetlania {}
// Format: "Display: (..., ...)"
// TODO: Porównaj dwa punkty i wypisz wynik
// Format: "Equal: true" lub "Equal: false"
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Metody i zachowanie
Wprowadzenie do bloków implementacjiParametr selfMetody modyfikująceFunkcje powiązaneWiele bloków implementacjiŁańcuchowe wywoływanie metodPowtórzenie — działania na prostokącie4Projekt: Wirtualne zwierzątko
Definiowanie zwierzątkaKarmienie zwierzątka7Standardowe cechy
Cecha DebugCecha DisplayClone i CopyCechy równościPowtórka – punkt do wydrukowania10Projekt: System dokumentów
Trait DrawKomponent tekstowy2Hermetyzacja i moduły
Podstawy modułówSłowo kluczowe publicPola prywatneGetterySetteryPodsumowanie — bezpieczna skrytka5Typy generyczne
Struktury generyczneMetody generyczneWiele typów generycznychFunkcje generycznePodsumowanie – punkt współrzędnych8Cechy jako ograniczenia
Składnia ograniczeń cechWiele ograniczeńKlauzula whereZwracanie typów z użyciem cechPodsumowanie — generyczna drukarka11Wzorce projektowe w Rust
Wzorzec NewtypeKompozycjaTrait DropFrom i IntoPodsumowanie — atrapowy inteligentny wskaźnik3Zaawansowane typy wyliczeniowe
Typy wyliczeniowe z danymiMetody typów wyliczeniowychDopasowywanie wariantów danychTyp wyliczeniowy Option — powtórzeniePodsumowanie — typ wyliczeniowy Shape6Definiowanie cech
Czym jest cecha?Implementowanie cechImplementacje domyślneNadpisywanie wartości domyślnychCechy z parametramiPowtórzenie — odtwarzacz multimedialnyPoćwicz samodzielnie: Kompilator Rust online