Итоги — перечисление Shape
Часть раздела Объектно-ориентированное программирование путешествия по Rust на Coddy. Урок 18 из 61.
Задание
ЛегкоДавайте создадим геометрический калькулятор, который использует enum для представления различных фигур, каждая из которых хранит собственные размеры. Ваш enum Shape продемонстрирует, как single тип может содержать различные структуры данных и предоставлять единое поведение через методы.
Вы создадите два файла, чтобы организовать код:
shape.rs: Define public enumShapeс двумя variant:Circle: holds singlef64, представляющее радиус (tuple syntax)Rectangle: holds named fields:width(f64) иheight(f64)
area, который использует pattern matching для calculate правильной площади на основе variant. Для окружностей используйте3.14159в качестве π.main.rs: Подключите модуль фигуры, создайте one экземпляр каждой variant фигуры using предоставленные inputs и выведите площадь каждой фигуры.
Ваш метод area должен возвращать f64. При сопоставлении destructure each variant, чтобы извлечь её размеры и применить appropriate формулу:
- Площадь Circle:
π × radius² - Площадь Rectangle:
width × height
Ваш вывод должен отображать площадь каждой фигуры в отдельной строке, ровно с one десятичным знаком:
Circle area: {area}
Rectangle area: {area}Например, при радиусе окружности 5.0 и Rectangle с width 4.0 и height 6.0 вывод будет таким:
Circle area: 78.5
Rectangle area: 24.0Вы получите three inputs: радиус окружности, width Rectangle и height Rectangle.
Попробуйте сами
mod shape;
use shape::Shape;
fn main() {
// Читаем входные данные
let mut radius_input = String::new();
std::io::stdin().read_line(&mut radius_input).expect("Failed to read line");
let radius: f64 = radius_input.trim().parse().expect("Invalid number");
let mut width_input = String::new();
std::io::stdin().read_line(&mut width_input).expect("Failed to read line");
let width: f64 = width_input.trim().parse().expect("Invalid number");
let mut height_input = String::new();
std::io::stdin().read_line(&mut height_input).expect("Failed to read line");
let height: f64 = height_input.trim().parse().expect("Invalid number");
// TODO: Создать фигуру Circle, используя radius
// TODO: Создать фигуру Rectangle, используя width и height
// TODO: Вывести площадь каждой фигуры с одним десятичным знаком
// Format: "Circle area: {area}" and "Rectangle area: {area}"
}
Все уроки раздела Объектно-ориентированное программирование
1Методы и поведение
Введение в блоки реализацииПараметр SelfИзменяемые методыАссоциированные функцииНесколько блоков реализацииЦепочки вызовов методовИтоги: действия с Rectangle4Проект: Виртуальный питомец
Определение питомцаКормление питомца2Инкапсуляция и модули
Основы модулейКлючевое слово PublicПриватные поляГеттерыСеттерыИтоги — Безопасный сейф5Обобщения
Обобщённые структурыОбобщённые методыНесколько обобщённых типовОбобщённые функцииПовторение — Координатная точка8Трейты как ограничения
Синтаксис ограничений трейтовМножественные ограниченияКонструкция whereВозврат типов с трейтамиИтоги — Обобщённый принтер11Паттерны проектирования в Rust
Паттерн NewtypeКомпозицияТрейт DropFrom и IntoИтоги — Мок-объект Smart Pointer3Продвинутые перечисления
Перечисления с даннымиМетоды в перечисленияхСопоставление вариантов с даннымиСнова об Option EnumИтоги — перечисление Shape6Определение трейтов
Что такое трейт?Реализация трейтовРеализации по умолчаниюПереопределение реализаций по умолчаниюТрейты с параметрамиИтоги — Media PlayerПотренируйтесь самостоятельно: Онлайн-компилятор Rust