Pull to refresh

Введение в RxJava: Почему Rx?

Java *
Sandbox

Этот цикл статей предназначен для знакомства начинающего реактивного программиста с мощью библиотеки RxJava ˜— реализации принципов реактивного программирования для JVM. Это перевод обширного туториала по RxJava Крисса Фруссиоса, основанного на IntroToRx для Rx.NET.


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


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


Примеры к этим материалам доступны в двух видах:


  1. Примеры с выводом в консоль (рекоммендовано для читающих в первый раз)
  2. Самопроверяющиеся примеры в форме JUnit тестов

Содержание:


Часть первая – Вступление: Почему Rx?


Пользователи ожидают данных в реальном времени. Они хотят твиты сейчас. Подтвержение заказа сейчас. Им необходимы цены по состоянию на сейчас. Как разработчик, вы нуждаетесь в самонаводящихся сообщениях. Вы не хотите быть блокированным в ожидании результата. Вы хотите, чтобы результат пришел к вам по готовности. Даже более того, вы хотите работать с результатом по частям: вы не хотите ждать пока загрузится всё перед тем как отобразить первую строку. Мир перешел в режим уведомлений. У разработчиков есть инструменты, чтобы уведомлять, это легко. Им нужны инструменты чтобы реагировать на уведомления.

Добро пожаловать в Rx. Rx – это мощный инструмент, который позволяет решать проблемы в элегантном декларативном стиле, присущем функциональному программированию. Rx обладает следующими преимуществами:


  • Интуитивность
    • Действия в Rx описываются в таком же стиле, как и в других библиотеках вдохновленных функциональным программированием, например, Java Streams. Rx дает возможность использовать функциональные трансформации над потоками событий.

  • Расширяемость
    • RxJava может быть расширена пользовательскими операторами. И хотя Java не позволяет сделать это элегантным образом, RxJava предлагает всю расширяемость доступную в реализациях Rx на любом другом языке.

  • Декларативность
    • Функциональные трансформации обьявлены декларативно.

  • Компонуемость
    • Операторы в Rx легко компонуются, чтобы проводить сложные операции.

  • Преобразуемость
    • Операторы в Rx могут трансформировать типы данных, фильтруя, обрабатывая и расширяя потоки данных при необходимости.


Когда следует использовать Rx?

Rx применяется для составления и обработки последовательностей событий.


Следует использовать Rx

  • UI события, такие как mouse move, button click
  • События вроде изменения свойства, обновления коллекции, «Заказ оформлен», «Регистрация закончена» и т.д.
  • Инфраструктурные события (сообщения от системы, WMI или файловых менеджеров)
  • Интеграция с событиями от шины сообщений (message bus), сообщениями из WebScoket API
  • Интеграция с CEP-системами (StreamInsight, StreamBas)

Возможно использование Rx

  • Результат Future или похожего паттерна

Не следует использовать Rx

  • Для превращения Iterable в Observable только для того, чтобы работать с ними через библиотеку Rx.

В следующей части мы рассмотрим фундаментальные типы, на которых основана концепция реактивного программирования: Observable и Observer.


Теперь у проекта есть свой публичный репозиторий и любой желающий может присоединится к созданию углубленного русскоязычного туториала по Rx. Перевод этой части уже там, остальные появятся в скором времени, а с вашей помощью, еще быстрее.

Tags:
Hubs:
Total votes 35: ↑23 and ↓12 +11
Views 164K
Comments Comments 10