Корутины (Kotlin Coroutines) — стандарт асинхронного программирования в Kotlin. Они заменяют устаревшие потоки и callbacks, упрощают работу с параллельными задачами и стали основой Android, Ktor и Spring WebFlux.
Если вы хотите писать современный, быстрый и надежный код, без корутин сегодня никуда. Кроме того, о корутинах всегда спрашивают на технических собеседованиях по Kotlin и Android, поэтому всем нам, разработчикам, необходима твердая теоретическая база.
Курс построен по принципу быстрого старта. Уже во второй главе вы напишете свою первую корутину и увидите, что асинхронное программирование может быть простым и понятным.
В отличие от других учебных материалов, курс делает акцент не на тонкостях реализации библиотеки Kotlin Coroutines, а на практическом программировании: как правильно запускать задачи, управлять их жизненным циклом, обрабатывать исключения и тестировать код.
Теоретическая часть охватывает корутинные билдеры, скоупы, контексты, исключения и тестирование. Последние три главы посвящены каналам и Flow — инструментам, которые активно применяются в современных проектах.
Практическая часть включает тесты для закрепления изученного.
Рекомендовано российским сообществом Kotlin!
Для кого этот курс:
- Android-разработчики, которые используют Kotlin Coroutines и Flow и хотят глубже понять асинхронность.
- Backend-разработчики на Kotlin, которых интересуют современные подходы к структурированной конкурентности.
- Full-stack и multiplatform-разработчики, которым важно разбираться в корутинах, каналax и потоках данных, независимо от платформы.
- Разработчики, готовящиеся к техническим собеседованиям: вопросы о suspend-функциях, scope, Flow и обработке исключений — стандартная практика.
- Те, кто переходит с RxJava на современный подход с корутинами.
Программа курса
Введение
- От автора
- Исторический экскурс
- Ключевые термины
- Корутины vs. потоки
Быстрый старт
- Первая корутина
- Вторая корутина
- suspend
- Точки приостановки. delay и yield
Билдеры корутин
- runBlocking
- launch и async
- Применение функции select в связке с async
Структурированная конкурентность
- Иерархия корутин. Скоупы
- CoroutineScope()
- coroutineScope
- GlobalScope
Контекст корутины
- Структура контекста
- Сложение и вычитание контекстов
- Формула композиции контекстов
- Примеры создания контекста
Диспетчеры
- Понятие диспетчера
- Dispatchers.Default
- Dispatchers.IO
- Dispatchers.Main
- Dispatchers.Unconfined
Job
- Определение и жизненный цикл
- Создание Job
- Отмена Job
- Ожидание потомков
- Распространение отмены по иерархии
Обработка исключений
- Исключения в билдерах и корутин-скоуп функциях
- Распространение исключений по иерархии
- SupervisorJob и supervisorScope
- Обработчик CoroutineExceptionHandler
Тестирование корутин
- Библиотека kotlinx-coroutines-test и функция runTest
- Виртуальное время
- Собственный планировщик
- Тестовые диспетчеры
- Тестирование исключений
Каналы
- Паттерн producer-consumer. Функции send() и receive()
- Создание канала
- Параметры канала
- Несколько отправителей и получателей
- Select для работы с каналами
Kotlin FLow
- Ленивые вычисления
- Понятие Flow. Создание Flow
- Структура Flow. Операторы
- Управление скоростью потока
- Контекст выполнения
- Обработка исключений в Flow
- Отмена потоков
Горячие потоки данных в Kotlin Flow
- SharedFlow
- MutableSharedFlow
- StateFlow и MutableStateFlow
Послесловие
- Материалы для дальнейшего изучения








