Приветствуем, Хабр.
Как знают наши постоянные читатели, в последние пару лет мы регулярно заходим на территорию языка Kotlin. Базовой литературы по Kotlin сейчас достаточно, но сегодня мы хотим презентовать вам новинку для настоящих профессионалов — «Асинхронный Kotlin». Книга подготовлена Яной Седовой @Ioanna на основе её собственного курса «Kotlin Coroutines & Flow для Android: от основ до production» размещённого на платформе «Степик». Яна Седова активно работает с этой платформой, вот, что она успела на ней разместить.
Как известно, язык Kotlin используется для разработки под Android с 2012 года, и де-факто котируется в мобильной разработке не ниже чем Java. В целом Kotlin не слишком отличается от других языков для виртуальной машины Java (JVM) и не так сложен с синтаксической точки зрения, но в реальной практике полон неочевидных тонкостей. Один из самых важных аспектов работы с Kotlin – обращение с корутинами. Корутина — это процедура, которую можно в нужный момент приостановить, а затем возобновить именно с этой точки. Мы с автором подбирали такое название книги, которое точно передавало бы её тему даже в каталожной карточке или поисковой выдаче, и полагаем, что асинхронность – самая важная сторона Kotlin, которая в этой книге освещена и детально разобрана. Вот как сама автор описывает во введении композицию и наполнение своей книги:
Отрывок из введения
Kotlin — сравнительно молодой язык, появившийся как удобная и безопасная альтернатива Java в экосистеме JVM. Изначально он воспринимался как еще один язык поверх Java, но со временем его роль существенно изменилась. Сегодня Kotlin — это не только основной язык Android-разработки, но и универсальный инструмент, выходящий за пределы JVM (Kotlin Multiplatform, Kotlin/Native, Kotlin/JS).
Причины такого роста достаточно прагматичны. Kotlin предлагает более компактный и выразительный синтаксис, строгую систему типов с null-безопасностью, встроенную поддержку асинхронного программирования через корутины и полную совместимость с Java-кодом. В результате он оказался не просто удобнее Java, а качественно меняющим стиль разработки, особенно в задачах, связанных с конкурентностью и асинхронностью.
С точки зрения обучения Kotlin интересен сразу в двух ролях. С одной стороны, он подходит как первый язык программирования: в нем меньше шаблонного кода, а многие сложные концепции (например, работа с null или асинхронность) встроены на уровне языка. С другой стороны, для разработчиков, знакомых с Java, Kotlin — это естественный следующий шаг. Он позволяет писать более краткий и безопасный код, постепенно внедрять новые подходы без переписывания всей системы и по-новому взглянуть на привычные задачи — особенно на многопоточность и асинхронность. И именно здесь возникают корутины.
Мы привыкли учиться от простого к сложному, от аксиом к теоремам, от базовых понятий к сложным концепциям, от «Hello, world!» к многомодульным приложениям. Но библиотеке Kotlin Coroutines в этом смысле не повезло. И документация, и немногочисленные (особенно на русском языке) учебные материалы с первых страниц оглушают читателя потоком понятий, которые объясняются друг через друга. Приблизительно так: Job — это часть контекста, а контекст — это контейнер, содержащий Job. Раскрутить этот клубок бывает непросто.
Некоторые хайлайты книги
Для работы с книгой требуется уверенно понимать язык Kotlin, понимать его синтаксис, структуры данных, а также место Kotlin в экосистеме Java и роль в разработке под Android.
Теоретическая часть книги, занимающая части I и II (c. 15 — 145), знакомит вас не столько с языком Kotlin, сколько с природой конкурентности и параллелизма в Android, сборкой корутин, объектом Job («Задание»), диспетчеризацией ввода/вывода, контекстами и тестированием отдельных корутин. Тогда как первая часть посвящена исследованию объектов в коде Kotlin, вторая подробно разбирает потоки задач — горячие потоки, холодные потоки, каналы, паттерн producer/consumer. Начиная с главы 5 листинги серьёзно усложняются. Автор чередует их с подробным разбором вывода функций. Иллюстрации к книге — это в основном аннотированные листинги и блок-схемы.
Автор постепенно помогает понять, что работа с Kotlin в продакшне — это, прежде всего, работа с библиотеками, тестирование и измерение. Центральный проект части III – это проектирование собственного мессенджера, написанного специально для курса Stepik и для этой книги. Автор задействует в работе инструмент Flow, предназначенный для обращения с асинхронными данными в Kotlin. Также здесь разобраны библиотеки Room и Retrofit и, конечно же, затронуты важные аспекты конструирования UI при помощи Jetpack Compose. Вот суть проекта (цитата из книги):
Пишем собственный мессенджер
Давайте напишем собственный мессенджер. Этот вид приложений как нельзя лучше демонстрирует преимущества реактивной парадигмы. Сообщение может прилететь в любой момент — пока вы читаете старую переписку, пока листаете список чатов, пока телефон лежит в кармане. Собеседник начал печатать — экран должен отреагировать.
Сообщение доставлено — значок должен измениться. Счетчик непрочитанных обновился — список чатов должен перестроиться. И всё это происходит не по команде пользователя, а по инициативе данных. Программа не запрашивает обновления — она на них подписана и реагирует по мере поступления. Это и есть реактивная парадигма, реализуемая Kotlin Flow.
Наш мессенджер (рис. 14.1) будет уметь:
показывать список чатов с последним сообщением и счетчиком непрочитанных;
отображать историю сообщений в чате;
отправлять и получать текстовые сообщения;
показывать статусы сообщений (отправляется, отправлено, доставлено, прочитано);
выводить индикатор «печатает...», когда собеседник набирает текст;
искать по истории сообщений
При этом мы сознательно отсекаем всё, что не связано с темой книги: регистрацию с логином и паролем, групповые чаты, отправку фото и файлов, пуш-уведомления? шифрование, редактирование и удаление сообщений.
Для тестирования нам не понадобится второе устройство — на стороне учебного сервера работают боты, которые отвечают с небольшой задержкой, иногда «печатают», а иногда присылают несколько сообщений подряд. Если вы захотите в дальнейшем доработать этот проект до полноценного мессенджера с реальными собеседниками, будет достаточно заменить ботов на авторизованных пользователей и добавить пуш-уведомления.
Подробное оглавление
Традиционно публикуем под спойлером полное оглавление книги
Оглавление





Кому и для чего нужна эта книга
Таким образом, у нас получилась первая на русском языке профессиональная, а не ознакомительная книга по Kotlin, которая пригодится вам в реальных проектах больше, чем при прохождении собеседования. Это книга для желающих выучить, а не «подучить» реальный Kotlin и понять, почему этот язык так востребован при создании компактных высокопроизводительных мобильных приложений. Это книга не только о языке, но и об устранении узких мест, и о проектировании исходно смартфонных приложений, в ней изложена именно та информация, которая нужна Kotlin-разработчику после освоения азов, когда «Hello World» уже наскучил. Безусловно, в книгу вошла лишь часть огромного авторского опыта (Яна Седова – в прошлом доцент вуза, а сейчас — старший data scientist в «Сбере»), и тем, кому эта книга покажется интересной, следует обратиться к курсам автора на Stepik; кстати, она продолжает готовить новые материалы для этой платформы прямо сейчас. Но книга видится нам самостоятельным незаменимым произведением, так как значительно выигрывает у имеющихся русскоязычных аналогов в исследовании тестирования и обработки исключений. Кроме того, автор уверенно заходит на поле System Design, поэтому, прочитав её, вы напишете на Kotlin код, в работоспособности и предсказуемости которого будете совершенно уверены.
Ioanna
Спасибо @BHV_publishing и @OlegSivchenko за сотрудничество! Интересный анонс, мне даже самой захотелось прочитать эту книгу)
Plesser
Вы так написали, как будто ее не читали )))))