Skip to content

Android-Developer-Basic/kotlin-6

Repository files navigation

Kotlin-6 - Рецепты

Код к занятию Kotlin-6 - Рецепты

Внимание! Все этапы презентации лежат в отдельных коммитах по шагам. Можно выкладывать коммиты один за другим, чтобы идти от простого к сложному. Подробности в записи и в презентации.

Тема занятия

  1. Scope-функции
  2. Inline-функции
  3. Делегирование в Kotlin
  4. Обзор паттернов проектирования

Домашнее задание

Шаблонные файлы и тесты смотрите в папке homework.

Задание 1. Inline-функция

В этом упражнении вы попрактикуетесь в использовании inline-функций и их особенностей.

  • В файле processList.kt определена функция processList, которая принимает список целых чисел и действие для каждого элемента списка.
  • В этом же файле определена функция skipThreeAndPrint, которая использует processList для обработки списка.
  • skipThreeAndPrint должна пропустить третий элемент списка и печатать оставшиеся элементы.
  • Исправьте код в skipThreeAndPrint так, чтобы он работал корректно. Пользуйтесь возможностями inline-функций и локального возврата.
  • Используйте готовый тест ProcessListTest для проверки.

Задание 2. Паттерн Декоратор

В этом упражнении вы попрактикуетесь в использовании паттерна Декоратор. Изучите паттерн, доступные в сети материалы.

  • В файле Coffee.kt определен интерфейс Coffee - базовый кофейный напиток.
  • Вам предстоит реализовать три декоратора - MilkDecorator, SugarDecorator и VanillaDecorator, которые будут добавлять соответствующие ингредиенты к кофейному напитку, используя патерн Декоратор.
  • Используйте готовый тест CoffeeTest для проверки.
  • Дополнительное задание (не обязательно). Подумайте над архитектурой декоратора. Как можно сделать базовый класс декоратора для использования в разных добавках без дублирования кода декорации.

Задание 3. Профиль пользователя и делегирование

В папке с домашним заданием вы найдете интерфейс профиля пользователя и его простую реализацию. В этом задании вам предстоит сделать несколько доработок к классу реализации:

  1. Использовать делегат vetoable для проверки корректности email пользователя.
  2. Использовать собственный делегат NonEmptyStringDelegate для проверки корректности имени пользователя.

Задание 3.1. Проверка email с помощью делегат-свойства vetoable

  • Замените реализацию свойства email на делегат vetoable. Проверяйте введенный email на корректность при помощи регулярного выражения.
  • Используйте готовый тест UserProfileTest для проверки.

Задание 3.2. Проверка имени пользователя с помощью собственного делегата

  • В папке с домашним заданием вы найдете шаблон делегата NonEmptyStringDelegate. Дополните его реализацию таким образом, чтобы он не допускал установки пустой строки или строки состоящей только из пробелов.
  • Используйте готовый тест NonEmptyStringDelegateTest для проверки.
  • Воспользуйтесь созданным делегатом для проверки имени пользователя в классе UserProfile.
  • Используйте готовый тест UserProfileTest для проверки.

Задание 3.3. Профиль пользователя с логированием

  • Интерфейс UserProfile содержит интерфейс Logging:
    /**
     * Профиль с логированием
     */
     interface Logging : UserProfile, WithLogging
  • В интерфейсе UserProfile определена функция createWithLogging, которая должна создавать профиль с логированием.
  • Напишите реализацию профиля с логированием при помощи отдельного класса или анонимного объекта.
  • Подсказка: Старайтесь по-максимуму пользоваться делегированием и результатами предыдущих заданий.
  • Используйте готовый тест LoggingUserProfileTest для проверки.

About

Демо-проект к занятию Kotlin-рецепты

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages