Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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からイベント通知を受け取るインターフェース」と、「イベントを通知するクラス、とそのイベント通知に必要なロジック」という感じに説明できそうです。

また一つ賢くなった。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした