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

Этот цикл статей предназначен для знакомства начинающего реактивного программиста с мощью библиотеки 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. Перевод этой части уже там, остальные появятся в скором времени, а с вашей помощью, еще быстрее.

  • +11
  • 113k
  • 9
Поделиться публикацией

Комментарии 9

    +13
    Мне кажется, стоит по две статьи объединять. Слишком небольшой объем получается.
      +14
      Снова введение в RxJava? Какой смысл одно и то же писать? Таких статей уже десятки, с описанием одних и тех же преимуществ и недостатков :)
      Лучше сразу писать о более продвинутом использовании Rx, имхо.
      Ну, или во всяком случае о чем-то, о чем не пишут на каждом заборе все блоггеры.
        –1
        Количество добавлений в избранное говорит о том, что людям интересно углубленное знакомство с RxJava. Они нажимают на звездочку с мыслью: «Как нибудь подучу что это такое, столько шуму вокруг». Там вверху написано, что это обширный туториал по RxJava , и без «преимуществ и недостатков» тут не обойтись.
          +1
          Количество добавлений в избранное почти ни о чём не говорит. Я, например, часто использую избранное как «прочитать позже» или «прикопать, чтобы потом показать кому-нибудь».
        +1
        Каждый раз, когда сталкиваюсь с Rx%Language% забочусь о производительности. Ведь создаются объекты и это здорово, но какие-то мы отбрасываем, какие-то отображаем во что-то другое (новые объекты) и уже потом отбрасываем. Вот, статью бы, которая сказала: «Не волнуйтесь %Товарищ%, можно использовать Rx%Language% и в то же время не сильно убавить производительность. Просто нужно то-то и то-то, а вот так-то и так-то делать не надо. Ну… Ну… Ну разве что иногда, когда вам нужно вот это или вон то..»
          +2
          Управляемые языки очень неплохо справляются с выделением памяти и дальнейшим сбором мусора из нулевого поколения (а именно оттуда и собираются все промежуточные объекты).
          –5
          >Почему Rx?
          Я думал, что узнаю какая связь с http://rxlib.ru/rx/rxlib.htm
            +3
            Ничего себе! Где вы это откопали?
              +2
              :-) Ух ты! Детство! :-D

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое