Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

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

Notifications You must be signed in to change notification settings

Android-Developer-Basic/kotlin-6

Open more actions menu

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

Morty Proxy This is a proxified and sanitized view of the page, visit original site.