create account

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

View this thread on: hive.blogpeakd.comecency.com
· @promari · (edited)
$29.01
【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.
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 793 others
properties (23)
authorpromari
permlinkprogramming-rxjava-vol-1
categorypromari
json_metadata{"links":["https://github.com/ReactiveX/RxJava","https://alexandreesl.com/tag/reactive-streams/","https://www.amazon.co.jp/dp/B06XGYSHCN/","https://steemit.com/promari/@promari/programming-rxjava-vol-2-rxjava","https://steemit.com/@tamito0201/","https://www.programming-mariage.jp/","https://www.programming-mariage.jp"],"image":["https://cdn.steemitimages.com/DQmfCQZTcVKXhN4fByhZqnKudpkJtK4SxwEHGqWfZbKm9Ni/o1AJ9qDyyJNSpZWhUgGYc3MngFqoAMxopALi6Zh4C8ck3F7cr.png","https://img.esteem.ws/ocnin23ywm.png","https://img.esteem.ws/f0vyyjfk2h.png","https://img.esteem.ws/b76920vga1.png","https://img.esteem.ws/t0r78hqbeu.png","https://img.esteem.ws/btpb5hmlur.png"],"tags":["promari","programming","japanese","blog","java"],"app":"steemit/0.1","format":"markdown","community":"esteem.app"}
created2019-03-31 11:04:54
last_update2019-04-05 21:54:18
depth0
children2
last_payout2019-04-07 11:04:54
cashout_time1969-12-31 23:59:59
total_payout_value21.774 HBD
curator_payout_value7.236 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length2,843
author_reputation6,028,120,705,374
root_title"【Programming】RxJavaリアクティブプログラミング vol.1 / リアクティブプログラミングの概要"
beneficiaries
0.
accountesteemapp
weight1,000
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id82,243,607
net_rshares42,979,768,191,622
author_curate_reward""
vote details (857)
@victhor-ebis ·
Love up
properties (22)
authorvicthor-ebis
permlinkre-promari-programming-rxjava-vol-1-20190331t123906666z
categorypromari
json_metadata{"tags":["promari"],"app":"steemit/0.1"}
created2019-03-31 12:39:36
last_update2019-03-31 12:39:36
depth1
children1
last_payout2019-04-07 12:39:36
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length7
author_reputation121,512,573,104
root_title"【Programming】RxJavaリアクティブプログラミング vol.1 / リアクティブプログラミングの概要"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id82,246,623
net_rshares0
@tamito0201 ·
thank you!
👍  
properties (23)
authortamito0201
permlinkre-victhor-ebis-re-promari-programming-rxjava-vol-1-20190331t221938743z
categorypromari
json_metadata{"tags":["promari"],"app":"steemit/0.1"}
created2019-03-31 22:19:39
last_update2019-03-31 22:19:39
depth2
children0
last_payout2019-04-07 22:19:39
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length10
author_reputation107,566,925,670,081
root_title"【Programming】RxJavaリアクティブプログラミング vol.1 / リアクティブプログラミングの概要"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id82,275,841
net_rshares69,871,856
author_curate_reward""
vote details (1)