Итоги — Printable Point
Часть раздела Object Oriented Programming путешествия по Rust на Coddy — урок 39 из 61.
Задание
ЛегкоДавайте объединим все стандартные типажи (traits), которые вы изучили, создав полнофункциональную структуру Point, которую можно отлаживать, красиво отображать и сравнивать на равенство!
Вы организуете свой код в двух файлах:
point.rs: Определите публичную структуруPointс публичными полямиxиy(оба типаi32). Ваша точка должна поддерживать три возможности:- Отладочный вывод с помощью
{:?}— реализуйте это автоматически через derive - Удобное для пользователя отображение с помощью
{}в формате(x, y)— реализуйте это вручную, используяstd::fmt::Display - Сравнение на равенство с помощью
==— реализуйтеPartialEqчерез derive
- Отладочный вывод с помощью
main.rs: Подключите модуль point и создайте два экземпляраPoint, используя предоставленные входные данные. Продемонстрируйте все три возможности, выведя первую точку в отладочном формате, вторую точку в формате отображения и сравнив, равны ли эти две точки.
Ваш вывод должен показывать работу всех трех типажей:
Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}Например, при входных данных 3, 5, 3, 5:
Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: trueИ при входных данных 10, 20, 5, 15:
Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: falseВы получите четыре входных значения: координаты x и y для первой точки, а затем координаты x и y для второй точки. Обработайте каждое из них как i32.
Попробуйте сами
mod point;
use point::Point;
fn main() {
// Считать четыре входных значения: 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: Создать два экземпляра Point, используя входные данные
// TODO: Вывести первую точку, используя формат отладки {:?}
// Формат: "Debug: Point { x: ..., y: ... }"
// TODO: Вывести вторую точку, используя формат отображения {}
// Формат: "Display: (..., ...)"
// TODO: Сравнить две точки и вывести результат
// Формат: "Equal: true" или "Equal: false"
}
Все уроки раздела Object Oriented Programming
1Методы и поведение
Введение в блоки реализацииПараметр SelfИзменяемые методыАссоциированные функцииНесколько блоков реализацииЦепочки вызовов методовИтоги: действия с Rectangle4Проект: Виртуальный питомец
Определение питомцаКормление питомца2Инкапсуляция и модули
Основы модулейКлючевое слово PublicПриватные поляГеттерыСеттерыИтоги — Безопасный сейф5Обобщения
Обобщённые структурыОбобщённые методыНесколько обобщённых типовОбобщённые функцииПовторение — Координатная точка8Трейты как ограничения
Синтаксис ограничений трейтовМножественные ограниченияКонструкция whereВозврат типов с трейтамиИтоги — Обобщённый принтер11Паттерны проектирования в Rust
Паттерн NewtypeКомпозицияТрейт DropFrom и IntoИтоги — Мок-объект Smart Pointer3Продвинутые перечисления
Перечисления с даннымиМетоды в перечисленияхСопоставление вариантов с даннымиСнова об Option EnumИтоги — перечисление Shape6Определение трейтов
Что такое трейт?Реализация трейтовРеализации по умолчаниюПереопределение реализаций по умолчаниюТрейты с параметрамиИтоги — Media Player