Трейты (Traits) - это способ определить общее поведение для различных типов в Rust. Они позволяют обеспечить полиморфизм и повторное использование кода через механизмы, подобные интерфейсам в других языках программирования. В этой статье мы рассмотрим, что такое трейты и как их реализовать в Rust.
Определение трейта
Трейт определяет набор методов, которые тип должен реализовать для того, чтобы поддерживать этот трейт. Они позволяют гарантировать, что конкретный тип имеет определенные функциональные возможности.
В этом примере, мы определяем трейт Printable, который имеет один метод print(). Каждый тип, реализующий этот трейт, должен предоставить собственную реализацию метода print().
Реализация трейта
Реализация трейта позволяет типу предоставить реализацию методов, определенных в трейте. Реализация трейта для конкретного типа осуществляется с помощью ключевого слова impl.
В этом примере, мы определяем структуру Circle, а затем реализуем для неё трейт Printable, предоставляя собственную реализацию метода print().
Параметризация типов с помощью трейтов
Трейты также могут использоваться для параметризации типов функций или структур. Это позволяет обобщить код и работать с различными типами данных.
В этом примере, мы определяем трейт Area, который определяет метод area(), возвращающий площадь фигуры. Затем мы реализуем этот трейт для типов Circle и Rectangle. Функция print_area() принимает параметр с типом, который реализует трейт Area.
Задание:
- Создайте трейт Shape, определяющий методы area() и perimeter() для вычисления площади и периметра фигуры соответственно.
- Реализуйте трейт Shape для двух структур Circle и Rectangle.
- Напишите программу, которая принимает ввод от пользователя для создания фигуры (круга или прямоугольника) и затем использует методы area() и perimeter() для вычисления и вывода площади и периметра выбранной фигуры.
Подсказка: Для чтения пользовательского ввода, используйте функцию read_input() из предыдущих статей.