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

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@promari·
0.000 HBD
【Programming】RxJavaリアクティブプログラミング vol.1 / リアクティブプログラミングの概要
![o1AJ9qDyyJNSpZWhUgGYc3MngFqoAMxopALi6Zh4C8ck3F7cr.png](https://cdn.steemitimages.com/DQmfCQZTcVKXhN4fByhZqnKudpkJtK4SxwEHGqWfZbKm9Ni/o1AJ9qDyyJNSpZWhUgGYc3MngFqoAMxopALi6Zh4C8ck3F7cr.png)

業務で[RxJava](https://github.com/ReactiveX/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](https://img.esteem.ws/ocnin23ywm.png)
#### Source:[JAVA 9: LEARNING THE NEW FEATURES – PART 3](https://alexandreesl.com/tag/reactive-streams/)

- PublisherとSubscriberのシーケンス図

![f0vyyjfk2h.png](https://img.esteem.ws/f0vyyjfk2h.png)
#### Source:[RxJavaリアクティブプログラミング](https://www.amazon.co.jp/dp/B06XGYSHCN/)

#### 1.2.3 Reactive Steamsのインタフェース

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

![b76920vga1.png](https://img.esteem.ws/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の概要](https://steemit.com/promari/@promari/programming-rxjava-vol-2-rxjava)」についてまとめてみます。

![t0r78hqbeu.png](https://img.esteem.ws/t0r78hqbeu.png)
written by [tamito0201](https://steemit.com/@tamito0201/)

プログラミングとのご縁結びなら[プロマリ](https://www.programming-mariage.jp/)へ。

オンラインプログラミング学習スクールの[プロマリ](https://www.programming-mariage.jp/)は、プログラミングの初学者の皆様を応援しています。プログラミング講師と一緒に面白いアプリを作りませんか。

<a href="https://www.programming-mariage.jp">![btpb5hmlur.png](https://img.esteem.ws/btpb5hmlur.png)</a>

The programming school "[Promari](https://www.programming-mariage.jp/)" will help you learn programming. "[Promari](https://www.programming-mariage.jp/)" is supporting the first scholars of programming. Let's develop an application with our programming instructor.
👍 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,