【Programming】RxJavaリアクティブプログラミング vol.1 / リアクティブプログラミングの概要

in #promari5 years ago (edited)

o1AJ9qDyyJNSpZWhUgGYc3MngFqoAMxopALi6Zh4C8ck3F7cr.png

業務でRxJavaを触ることになりましたので要点をまとめてみたいと思います。

1. Introduction

1.1 リアクティブプログラミング

  • データが流れるように来ること(ストリーム)に着目し、データを受け取るたびに関連したプログラムが反応(リアクション)して処理を行うようにするプログラミングの考え方
  • プログラムが必要なデータを自分から取得し処理をするのではなく、送られてきたデータを受け取るたびに反応して処理をする(リアクティブな処理をする)ようなプログラム

1.2 Reactive Streams

1.2.1 概要

  • Reactive Streamsとは、「JVM 上でのノンブロッキングなバックプレッシャーを持つ非同期ストリーム処理の標準」で、 様々な非同期ストリーム処理のインタフェースを共通化して標準的に扱えるようにしようというもの
  • Reactive Streamsの仕様に沿っていれば、どのライブラリやフレームワークを使っているのかに関係なく、データストリームを非同期で扱うための共通の仕組みを提供する

1.2.2 Reactive Steamsの構成

  • Reactive Streamsの基本的な構成はデータを生産し通知する生産者(Publisher)と、通知されたデータを受け取り処理を行う消費者(Subscriber)の関係で成り立つ。

ocnin23ywm.png

Source:JAVA 9: LEARNING THE NEW FEATURES – PART 3

  • PublisherとSubscriberのシーケンス図

f0vyyjfk2h.png

Source:RxJavaリアクティブプログラミング

1.2.3 Reactive Steamsのインタフェース

インターフェース説明
Publisherデータを生産し通知する役割を持つインターフェース
Subscriber通知されたデータを受け取り処理を行うインターフェース
Subscriptionデータ数のリクエストおよび購読の解除を行えるインターフェース
ProcessorPublisherとSubscriberの両方の性質を持つインターフェース

b76920vga1.png

1.2.4 Reactive Streamsのルール

  • Reactive Streamsの仕組みが機能するために以下のルールに従う必要がある。

    • 購読開始の通知(onSubscribe)はその購読で1度だけしか通知されない
    • 通知はシーケンシャル(逐次的)に行う。複数の通知を同時に行わない。
    • nullを通知しない。nullを通知すると、Reactive Streamsでは、NullPointerExceptionを発生させる仕様になっている。
    • Publisherの処理は完了(onComplete)もしくはエラー(onError)を通知することで終了とする
  • データ数のリクエストや購読の解除を行うSubscriptionに関して次のようなルールが存在する。

    • データ数のリクエストにLong.MAX_VALUEを渡した場合、データ数による通知の制限はなくなる
    • Subscriptionのメソッドは同期を取った状態で呼ばなければならない
    • Subscriptionのメソッドを同時に呼ぶようなことはしてはならない。

※ 各通知のメソッドやSubscriptionのメソッドを呼び出す際に同期が取れており、処理自体がスレッドセーフであるか注意する必要がある。

次回は「【Programming】RxJava リアクティブプログラミング vol.2 / RxJavaの概要」についてまとめてみます。

t0r78hqbeu.png
written by tamito0201

プログラミングとのご縁結びならプロマリへ。

オンラインプログラミング学習スクールのプロマリは、プログラミングの初学者の皆様を応援しています。プログラミング講師と一緒に面白いアプリを作りませんか。

btpb5hmlur.png

The programming school "Promari" will help you learn programming. "Promari" is supporting the first scholars of programming. Let's develop an application with our programming instructor.

Coin Marketplace

STEEM 0.28
TRX 0.13
JST 0.032
BTC 65457.15
ETH 2939.01
USDT 1.00
SBD 3.68