Итоги: действия с Rectangle
Часть раздела Object Oriented Programming путешествия по Rust на Coddy — урок 7 из 61.
Задание
ЛегкоСоздайте структуру Rectangle с двумя полями: width (u32) и height (u32).
Добавьте блок реализации для Rectangle со следующим содержимым:
new— ассоциированная функция, которая принимаетwidth: u32иheight: u32и возвращает новый экземплярRectanglearea— метод, который принимает&selfи возвращает площадь какu32scale— метод, который принимает&mut selfиfactor: u32, умножая и ширину, и высоту на этот коэффициент
Вы получите три входных значения:
- Первая строка: ширина (u32)
- Вторая строка: высота (u32)
- Третья строка: коэффициент масштабирования (u32)
Создайте изменяемый объект Rectangle, используя Rectangle::new с заданными размерами. Выведите начальную площадь, затем масштабируйте прямоугольник на указанный коэффициент и выведите новую площадь.
Ожидаемый формат вывода:
{initial_area}
{scaled_area}Попробуйте сами
use std::io;
// TODO: Определите структуру Rectangle здесь
// TODO: Добавьте блок реализации для Rectangle с:
// - new: ассоциированная функция, которая принимает width и height, возвращает Rectangle
// - area: метод, который принимает &self, возвращает u32
// - scale: метод, который принимает &mut self и factor, умножает width и height
fn main() {
let mut input = String::new();
// Чтение ширины
io::stdin().read_line(&mut input).expect("Failed to read line");
let width: u32 = input.trim().parse().expect("Invalid number");
input.clear();
// Чтение высоты
io::stdin().read_line(&mut input).expect("Failed to read line");
let height: u32 = input.trim().parse().expect("Invalid number");
input.clear();
// Чтение коэффициента масштабирования
io::stdin().read_line(&mut input).expect("Failed to read line");
let factor: u32 = input.trim().parse().expect("Invalid number");
// TODO: Создайте изменяемый Rectangle, используя Rectangle::new
// TODO: Выведите начальную площадь
// TODO: Масштабируйте прямоугольник на коэффициент factor
// TODO: Выведите новую площадь
}Все уроки раздела Object Oriented Programming
1Методы и поведение
Введение в блоки реализацииПараметр SelfИзменяемые методыАссоциированные функцииНесколько блоков реализацииЦепочки вызовов методовИтоги: действия с Rectangle4Проект: Виртуальный питомец
Определение питомцаКормление питомца2Инкапсуляция и модули
Основы модулейКлючевое слово PublicПриватные поляГеттерыСеттерыИтоги — Безопасный сейф5Обобщения
Обобщённые структурыОбобщённые методыНесколько обобщённых типовОбобщённые функцииПовторение — Координатная точка8Трейты как ограничения
Синтаксис ограничений трейтовМножественные ограниченияКонструкция whereВозврат типов с трейтамиИтоги — Обобщённый принтер11Паттерны проектирования в Rust
Паттерн NewtypeКомпозицияТрейт DropFrom и IntoИтоги — Мок-объект Smart Pointer3Продвинутые перечисления
Перечисления с даннымиМетоды в перечисленияхСопоставление вариантов с даннымиСнова об Option EnumИтоги — перечисление Shape6Определение трейтов
Что такое трейт?Реализация трейтовРеализации по умолчаниюПереопределение реализаций по умолчаниюТрейты с параметрамиИтоги — Media Player