はじめに
インターンの中でRxJavaとRxKotlinというライブラリを聞くことがあったのですがいまいち理解できていなかったためそれらの理解も深めつつ、リアクティブプログラミングについてもキャッチアップすることがこの記事の目的です。
リアクティブプログラミング(RP)とは?
Wikipediaでは以下のように説明されていました。
リアクティブプログラミング(以下:RP)は値の変更を伝播させるデータフロー志向のプログラミングパラダイム。値の関係性を記述してプログラミングする。
なるほど?つまりリクエストを投げるような積極性はなくて、値の変更があったらそれを受け取る受け身のような感じ?
Rxとは?
Reactive Extentionの略。
非同期/イベント/時間に関する処理を、簡潔かつ宣言的に記述することができるC#ライブラリ。これが**ReactiveX**として多言語に移植され、RxKotlinやRxJavaのようなライブラリが生まれました。
Reactive Streamとは?
Rxを構成するインターフェースとして、Reactive Streamというものがあるみたいです。Reactive Streamは、ライブラリやフレームワークに関係なく、データストリームを非同期で扱えるようにするための共通の仕組みが作れるインターフェースを提供しています。
インターフェース | 役割 |
---|---|
Publisher | データを生産し、通知をする役割 |
Subscriber | 通知されたデータを受け取り、データ処理をする役割 |
SubScription | データ数のリクエストおよび購読の解除等。Subscriptionのリクエストを設定でもち、Publisherに教える役割 |
Processor | PublisherとSubscriberの両方の性質を持つ |
Rxを使用するモチベーション
正直ここまで調べてきた感想として「Rxってとても難しいのになぜ導入する必要があるの?」と思いました。
そうしてRxを使用するメリットを調べてたら、こちらの記事を見つけました。こちらの記事によると、
Rxを導入すると標準のeventではできなかった、あんなことやこんなことが簡単にできるようになり、結果的にソースコードの可読性・保守性が飛躍的に高めることができます。
また、コード全体でRxを導入することで、イベント駆動型2のコーディングスタイルとなり、結果的にクラス同士が疎結合となるような設計がしやすくなります。
とありました。なるほど、Rxについて少しだけ分かった気がします。
まとめ
今回はRxについて簡単にまとめてみました。
次回はRxKotlinを用いて一つアプリを作ってみようと思います。