RxSwift та корутини в Kotlin — факультатив з мобільної розробки від AGIMA та GeekBrains

RxSwift та корутини в Kotlin — факультатив з мобільної розробки від AGIMA та GeekBrains

Знання – це добре, просто чудово. Але потрібна ще й практика, щоб можна було використовувати отримані дані, перевівши їх із статусу «пасивне зберігання» до статусу «активне використання». Яким би добрим не було теоретичне навчання, потрібна ще робота «в полі». Сказане стосується практично будь-якої галузі навчання, включаючи, звичайно ж, розробку ПЗ.

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

Днями ми поговорили з Ігорем Веденєєвим, спеціалістом з iOS, та Олександром Тизіком, що спеціалізується на Android. Завдяки їм факультатив з мобільної розробки збагатився практичним спецкурсом з фреймворку RxSwift и корутин в Kotlin. У цій статті розробники розповідають про важливість кожного напряму програмістів.

Реактивне програмування в iOS на прикладі RxSwift

RxSwift та корутини в Kotlin — факультатив з мобільної розробки від AGIMA та GeekBrains
Викладач факультативу Ігор Вєдєнєєв: «C RxSwift ваш додаток літатиме»

Яку інформацію одержують студенти на факультативі?

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

RxSwift – навіщо цей фреймворк iOS-програмісту, як він полегшує життя розробнику?

RxSwift упорядковує роботу з потоками подій та зв'язками між об'єктами. Найпростіший і очевидніший приклад — це біндинги: наприклад, можна оновлювати інтерфейс, просто встановивши нові значення змінну в viewModel. Таким чином, інтерфейс стає data-driven. Крім того, RxSwift дозволяє описувати систему в декларативному стилі, що дозволяє впорядкувати код та підвищити читання. Все це допомагає ефективніше розробляти програми.

Для розробника знання фреймворку - це ще й добрий плюс у резюме, оскільки розуміння реактивного програмування, і особливо досвід з RxSwift, цінуються на ринку.

Чому варто вибрати саме цей фреймворк, а чи не інші?

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

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

Де варто використовувати RxSwift?

  1. Біндінги. Як правило, тут мова йде про UI, можливість змінювати UI, як би реагуючи на зміни даних, а не явно кажучи інтерфейсу, що час оновитися.
  2. Зв'язок компонентів та операцій. Відразу приклад. Нам треба отримати список даних із мережі. Насправді це не така проста операція. Для цього треба відправити запит, змапити відповідь до масиву об'єктів, зберегти його в базу даних і віддати його в UI. Відповідають за виконання цих операцій, як правило, різні компоненти (ми ж ми любимо і дотримуємося принципів SOLID?). Маючи під рукою такий інструмент, як RxSwift, з'являється можливість описувати, ЩО робитиме система, а ЯК вона це робитиме — перебуватиме в інших місцях. Саме за рахунок цього досягається найкраща організація коду та підвищується читальність. Умовно кажучи, код можна розділити на зміст і саму книгу.

Корутини в Kotlin

RxSwift та корутини в Kotlin — факультатив з мобільної розробки від AGIMA та GeekBrains
Викладач факультативу Олександр Тизік: «Сучасна розробка потребує сучасних технічних засобів»

Що викладатиметься на факультеті GeekBrains у рамках брендованої чверті?

Теорія, порівняння з іншими підходами, практичні приклади в чистому Kotlin і моделі Android-додатки. Що стосується практики, то студентам буде демонструватися додаток, в якому все зав'язане на coroutines. Справа в тому, що більшість програм — суцільні асинхронні та паралельні обчислення. А ось корутини Kotlin дозволяють заплутаний, різнорідний або надто складний і вимогливий за продуктивністю код звести до єдиного, простого для розуміння стилю, отримавши виграш у коректності виконання та продуктивності.

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

До речі, ще гарна новина. Поки записувався факультатив, вийшло оновлення бібліотеки Kotlin Coroutines, де з'явився клас Flow - аналог типів Flowable и Observable з RxJava. Оновлення, по суті, робить корутини feature complete з погляду розробника додатків. Щоправда, і розвиватися поки що є куди: незважаючи на те, що завдяки підтримці корутин у kotlin/native вже можна писати мультиплатформні програми на Kotlin і не страждати від відсутності RxJava або аналогів у чистому Kotlin, підтримка корутин у kotlin/native ще не повна. Наприклад, немає концепції акторів. Загалом у команди Kotlin варто в планах зробити підтримку складніших акторів на всіх платформах.

Kotlin Coroutines – чим вони допомагають розробнику Kotlin?

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

Чим Coroutines відрізняються від потоків?

Команда Kotlin називає корутини легковажними потоками. Плюс до всього, корутина може повертати якесь значення, тому що, за своєю суттю, корутина — це обчислення, що припиняється. Вона безпосередньо не залежить від системних потоків, потоки тільки виконують корутини.

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

Будь-які асинхронні, паралельні, «конкурентні» завдання добре вирішуються за допомогою корутин — чи це обробка натискань від користувача, чи похід у мережу, чи підписка на оновлення з бази даних.

У чистому Kotlin ці завдання вирішуються так само, як і в Java — за допомогою тисячі фреймворків, кожен з яких має свої плюси і мінуси, але жоден з них не має підтримки на рівні мови.

Як висновок варто сказати, що обидва факультативи (та й основні курси теж) оновлюються відповідно до змін зовнішніх умов. Якщо з'являються важливі оновлення у мовах чи фреймворках, викладачі це враховують та модифікують програму. Все це дозволяє тримати руку на пульсі процесу розробки, якщо можна висловитися.

Джерело: habr.com

Додати коментар або відгук