Итоги — 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Потренируйтесь самостоятельно: Онлайн-компилятор Rust