Код к занятию Kotlin-6 - Рецепты
Внимание! Все этапы презентации лежат в отдельных коммитах по шагам. Можно выкладывать коммиты один за другим, чтобы идти от простого к сложному. Подробности в записи и в презентации.
- Scope-функции
- Inline-функции
- Делегирование в Kotlin
- Обзор паттернов проектирования
Шаблонные файлы и тесты смотрите в папке homework
.
В этом упражнении вы попрактикуетесь в использовании inline-функций и их особенностей.
- В файле processList.kt определена функция
processList
, которая принимает список целых чисел и действие для каждого элемента списка. - В этом же файле определена функция
skipThreeAndPrint
, которая используетprocessList
для обработки списка. skipThreeAndPrint
должна пропустить третий элемент списка и печатать оставшиеся элементы.- Исправьте код в
skipThreeAndPrint
так, чтобы он работал корректно. Пользуйтесь возможностями inline-функций и локального возврата. - Используйте готовый тест
ProcessListTest
для проверки.
В этом упражнении вы попрактикуетесь в использовании паттерна Декоратор. Изучите паттерн, доступные в сети материалы.
- В файле Coffee.kt определен интерфейс
Coffee
- базовый кофейный напиток. - Вам предстоит реализовать три декоратора -
MilkDecorator
,SugarDecorator
иVanillaDecorator
, которые будут добавлять соответствующие ингредиенты к кофейному напитку, используя патерн Декоратор. - Используйте готовый тест
CoffeeTest
для проверки. - Дополнительное задание (не обязательно). Подумайте над архитектурой декоратора. Как можно сделать базовый класс декоратора для использования в разных добавках без дублирования кода декорации.
В папке с домашним заданием вы найдете интерфейс профиля пользователя и его простую реализацию. В этом задании вам предстоит сделать несколько доработок к классу реализации:
- Использовать делегат
vetoable
для проверки корректности email пользователя. - Использовать собственный делегат
NonEmptyStringDelegate
для проверки корректности имени пользователя.
- Замените реализацию свойства
email
на делегатvetoable
. Проверяйте введенный email на корректность при помощи регулярного выражения. - Используйте готовый тест
UserProfileTest
для проверки.
- В папке с домашним заданием вы найдете шаблон делегата
NonEmptyStringDelegate
. Дополните его реализацию таким образом, чтобы он не допускал установки пустой строки или строки состоящей только из пробелов. - Используйте готовый тест
NonEmptyStringDelegateTest
для проверки. - Воспользуйтесь созданным делегатом для проверки имени пользователя в классе
UserProfile
. - Используйте готовый тест
UserProfileTest
для проверки.
- Интерфейс
UserProfile
содержит интерфейсLogging
:/** * Профиль с логированием */ interface Logging : UserProfile, WithLogging
- В интерфейсе
UserProfile
определена функцияcreateWithLogging
, которая должна создавать профиль с логированием. - Напишите реализацию профиля с логированием при помощи отдельного класса или анонимного объекта.
- Подсказка: Старайтесь по-максимуму пользоваться делегированием и результатами предыдущих заданий.
- Используйте готовый тест
LoggingUserProfileTest
для проверки.