Итоги: действия с Rectangle
Часть раздела Объектно-ориентированное программирование путешествия по Rust на Coddy. Урок 7 из 61.
Задание
ЛегкоCreate структуру Rectangle с двумя полями: width (u32) и height (u32).
Add блок implementation для Rectangle со следующим содержимым:
new: associated function, которая takeswidth: u32иheight: u32и returns новыйRectanglearea: takes&selfи returns площадь какu32scale: takes&mut selfиfactor: u32, multiplies и width, и height на factor
Ты получишь три входных значения:
- Первая строка: width (u32)
- Вторая строка: height (u32)
- Третья строка: scale factor (u32)
Create изменяемый Rectangle с использованием Rectangle::new и заданных размеров. Выведи initial area, затем увеличь rectangle с помощью заданного factor и выведи новую area.
Ожидаемый формат вывода:
{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();
// Прочитать width
io::stdin().read_line(&mut input).expect("Failed to read line");
let width: u32 = input.trim().parse().expect("Invalid number");
input.clear();
// Прочитать height
io::stdin().read_line(&mut input).expect("Failed to read line");
let height: u32 = input.trim().parse().expect("Invalid number");
input.clear();
// Прочитать scale factor
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: Выведите новую площадь
}Все уроки раздела Объектно-ориентированное программирование
1Методы и поведение
Введение в блоки реализацииПараметр SelfИзменяемые методыАссоциированные функцииНесколько блоков реализацииЦепочки вызовов методовИтоги: действия с Rectangle4Проект: Виртуальный питомец
Определение питомцаКормление питомца2Инкапсуляция и модули
Основы модулейКлючевое слово PublicПриватные поляГеттерыСеттерыИтоги — Безопасный сейф5Обобщения
Обобщённые структурыОбобщённые методыНесколько обобщённых типовОбобщённые функцииПовторение — Координатная точка8Трейты как ограничения
Синтаксис ограничений трейтовМножественные ограниченияКонструкция whereВозврат типов с трейтамиИтоги — Обобщённый принтер11Паттерны проектирования в Rust
Паттерн NewtypeКомпозицияТрейт DropFrom и IntoИтоги — Мок-объект Smart Pointer3Продвинутые перечисления
Перечисления с даннымиМетоды в перечисленияхСопоставление вариантов с даннымиСнова об Option EnumИтоги — перечисление Shape6Определение трейтов
Что такое трейт?Реализация трейтовРеализации по умолчаниюПереопределение реализаций по умолчаниюТрейты с параметрамиИтоги — Media PlayerПотренируйтесь самостоятельно: Онлайн-компилятор Rust