LoginSignup
13
9

More than 5 years have passed since last update.

ReactiveXを説明できるようになるシリーズその1 - ObserverとObservable

Last updated at Posted at 2015-12-14

RxJavaを使ってみて、便利だということは分かったし、何となくぼやーっと頭の中でどういうものなのかは理解できたけど、人に説明するとなると、どう説明すればいいのかイマイチ分からない...

そんなきっかけで、自分がReactiveXを人に説明できるようにするために、メモ書きを残すことにしました。

今回はその第1弾として、"Observer"と"Observable"をどう説明すればいいのか考えてみます。

Observer

Observerって何?ってことですが、その前にまずはReactiveXのページを見てみます。
http://reactivex.io/
2015/12/14時点で、ページ内には以下のように書かれています。

ReactiveX is a combination of the best ideas from
the Observer pattern, the Iterator pattern, and functional programming

つまり、「ReactiveXはObserverパターン、Iteratorパターン、ファンクショナルプログラミングの最高のアイディアを組み合わせたモノだよ」って言ってますね。

このうち、ちょっとObserverパターンがどういったモノか見てみると...
https://ja.wikipedia.org/wiki/Observer_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

Observer パターン(オブザーバ・パターン)とは、プログラム内のオブジェクトの状態を観察(英: observe)するようなプログラムで使われるデザインパターンの一種。

と書かれています。
また、上記のWikipediaにもありますが、Observerは

Subject からの更新通知を受け取る更新(英: update)インタフェースを定義するクラス。

と書かれています。
それを踏まえた上で、RxJavaのObserverを見てみると...
https://github.com/ReactiveX/RxJava/blob/1.x/src/main/java/rx/Observer.java

この中で定義されているインターフェースは、onCompleted、onError、onNextの3つです。
これらは、Observableをsubscribeするときに実装するメソッドで、それぞれObservableの中のロジックが終了したとき、処理中にエラーイベントが発生したとき、Observableからデータが引き渡されるときにそれぞれObservableから呼び出されます。

ここまで来ると、なんとなく上のObserverパターンと繋がってきたような気がします。
つまり、ReactiveXにおけるObserverは「Observableからのイベント通知を受け取るインターフェース」と言えそうです。

Observable

じゃあ今度はそのObservableって何だよって話ですが、これはReactiveXにページがあるのでそこを見てみます。
http://reactivex.io/documentation/observable.html

冒頭に

In ReactiveX an observer subscribes to an Observable.

「ReactiveXでは、observerはObservableを購読するよ」って書いてあるので、Observerについてはさっきの認識で良さそうです。

で、Observableについてはその次に

Then that observer reacts to whatever item or sequence of items the Observable emits.

「そして、observerはObservableが発行するどんなアイテムやシーケンスのアイテムにも反応します」と書いてあります。

つまり、Observableはザックリと「イベントを発行する元ネタを持ってるクラス」みたいな感じで言えそうですね。

つまり

ObserverとObservableは、それぞれ「Observableからイベント通知を受け取るインターフェース」と、「イベントを通知するクラス、とそのイベント通知に必要なロジック」という感じに説明できそうです。

また一つ賢くなった。

13
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9