Код к занятию 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для проверки.