Хабрахабр

RxSwift и корутины в Kotlin — факультатив по мобильной разработке от AGIMA и GeekBrains

Но нужна еще и практика, чтобы можно было использовать полученные данные, переведя их из статуса «пассивное хранение» в статус «активное использование». Знания — это хорошо, просто отлично. Сказанное касается практически любой сферы обучения, включая, конечно же, разработку ПО. Каким бы хорошим ни было теоретическое обучение, требуется еще работа «в поле».

AGIMA и GeekBrains создали факультатив для глубокого погружения в практические вопросы разработки мобильных приложений. В этом году GeekBrains в рамках факультета онлайн-университета GeekUniversity по мобильной разработке начал работать с интерактивным агентством AGIMA, команда которого — профессиональные разработчики (делают сложные высоконагруженные проекты, корпоративные порталы и мобильные приложения, вот это всё).

Благодаря им факультатив по мобильной разработке обогатился практическим спецкурсом по фреймворку RxSwift и корутинам в Kotlin. На днях мы поговорили с Игорем Веденеевым, специалистом по iOS, и Александром Тизиком, специализирующимся на Android. В этой статье разработчики рассказывают о важности каждого направления для программистов.

Реактивное программирование в iOS на примере RxSwift


Преподаватель факультатива Игорь Веденеев: «C RxSwift ваше приложение будет летать»

Какую информацию получают студенты на факультативе?

Также рассматривается несколько практических примеров. Мы рассказываем не только про возможности фреймворка, но и показываем, как его применять в классической связке MVVM + RxSwift. Это будет приложение поиска музыки с помощью iTunes Search API. Для закрепления полученных данных пишем приложение, максимально приближенное к полевым условиям работы. Там мы применим все Best Practices, плюс рассмотрим более простой вариант использования RxSwift в парадигме MVC.

RxSwift — зачем этот фреймворк iOS-программисту, как он облегчает жизнь разработчику?

Самый простой и очевидный пример — это биндинги: например, можно обновлять интерфейс, просто установив новые значение в переменную во viewModel. RxSwift упорядочивает работу с потоками событий и связями между объектами. Кроме того, RxSwift позволяет описывать систему в декларативном стиле, что позволяет упорядочить код и повысить читаемость. Таким образом, интерфейс становится data-driven. Всё это помогает эффективнее разрабатывать приложения.

Для разработчика знание фреймворка — это ещё и хороший плюс в резюме, поскольку понимание реактивного программирования, и в особенности опыт с RxSwift, ценятся на рынке.

Почему стоит выбрать именно этот фреймворк, а не другие?

То есть больше шансов, что проблема, с которой сталкивается разработчик, уже кем-то решена. У RxSwift самое большое сообщество. Более того, RxSwift — часть ReactiveX. Также большое количество биндингов из коробки. Это значит, что есть аналог для Android, например (RxJava, RxKotlin), а коллеги по цеху могут говорить друг с другом на одном языке, несмотря на то, что одни работают с iOS, другие — с Android.

Поскольку RxSwift опенсорсный, можно следить за всеми изменениями. Фреймворк постоянно обновляется, исправляются мелкие недочеты, добавляется поддержка фишек из новых версий Swift, добавляются новые биндинги. Более того, есть возможность добавлять их самому.

Где стоит применять RxSwift?

  1. Биндинги. Как правило, тут речь идёт про UI, возможность изменять UI, как бы реагируя на изменения данных, а не явно говоря интерфейсу, что пора обновиться.
  2. Связь компонентов и операций. Сразу пример. Нам надо получить список данных из сети. На самом деле, это не такая простая операция. Для этого надо отправить запрос, смаппить ответ в массив объектов, сохранить его в базу данных и отдать его в UI. Отвечают за выполнение этих операций, как правило, разные компоненты (мы же мы любим и следуем принципам SOLID?). Имея под рукой такой инструмент, как RxSwift, появляется возможность описывать, ЧТО будет делать система, а КАК она будет это делать — будет находиться в других местах. Именно за счёт этого достигается лучшая организация кода и повышается читаемость. Условно говоря, код можно поделить на оглавление и саму книгу.

Корутины в Kotlin


Преподаватель факультатива Александр Тизик: «Современная разработка требует современных технических средств»

Что будет преподаваться на факультете GeekBrains в рамках брендированной четверти?

Что касается практики, то студентам будет демонстрироваться приложение, в котором всё завязано на coroutines. Теория, сравнения с другими подходами, практические примеры в чистом Kotlin и в модели Android-приложения. А вот корутины Kotlin позволяют запутанный, разнородный или чересчур сложный и требовательный по производительности код свести к единому, простому для понимания стилю, получив выигрыш в корректности исполнения и производительности. Дело в том, что большинство приложений — сплошные асинхронные и параллельные вычисления.

Также поймем, как использовать концепции посложнее, например модель акторов, для решения более сложных задач, таких как хранилище данных в концепции MVI. Мы научимся писать идиоматичный код на корутинах, который решает практические задачи и понятен с первого взгляда даже без глубоких знаний того, как устроены корутины (что нельзя сказать о таких библиотеках, как RxJava).

Пока записывался факультатив, вышло обновление библиотеки Kotlin Coroutines, в котором появился класс Flow — аналог типов Flowable и Observable из RxJava. Кстати, ещё хорошая новость. Правда, и развиваться пока ещё есть куда: несмотря на то, что благодаря поддержке корутин в kotlin/native уже можно писать мультиплатформенные приложения на Kotlin и не страдать от отсутствия RxJava или аналогов в чистом Kotlin, поддержка корутин в kotlin/native ещё не полная. Обновление, по сути, делает корутины feature complete с точки зрения разработчика приложений. В целом, у команды Kotlin стоит в планах сделать поддержку более сложных акторов на всех платформах. Например, нет концепции акторов.

Kotlin Coroutines — чем они помогают разработчику Kotlin?

Также можно создавать адаптеры под другие асинхронные фреймворки и подходы, которые уже могут использоваться в кодовой базе. Корутины дают отличную возможность писать читаемый, поддерживаемый и безопасный, асинхронный и «конкурентный» (concurrency) код.

Чем Coroutines отличаются от потоков?

Плюс ко всему, корутина может возвращать какое-то значение, потому что, по своей сути, корутина — это приостанавливаемое вычисление. Команда Kotlin называет корутины легковесными потоками. Она не зависит напрямую от системных потоков, потоки только исполняют корутины.

Какие практические задачи можно решать с использованием Корутин, какие нельзя или сложно решать при помощи «чистого» Kotlin?

Любые асинхронные, параллельные, «конкурентные» задачи хорошо решаются при помощи корутин — будь то обработка нажатий от пользователя, поход в сеть или подписка на обновления из базы данных.

В чистом Kotlin эти задачи решаются так же, как и в Java — при помощи тысячи фреймворков, у каждого из которых есть свои плюсы и минусы, но ни один из них не имеет поддержку на уровне языка.

В качестве вывода стоит сказать, что оба факультатива (да и основные курсы тоже) обновляются в соответствии с изменениями внешних условий. Если появляются важные обновления в языках или фреймворках, преподаватели это учитывают и модифицируют программу. Всё это позволяет держать руку на пульсе процесса разработки, если так можно выразиться.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»