引き続き以下なリポジトリのソースを確認を。
Observable に着目。
MockServer というクラスで Observable を戻すメソドが定義されてるのですが基本的には
- JsonObject を生成して
- Observable.just にオブジェクトを渡した戻りの Observable を戻す
という事をしてます。rx.Observable か。いくつか使ってるメソドが何をしているのか、を確認してみます。
Observable.just
配列やリストではない 10 個までのオブジェクトを Observable 化したい場合に使う、とのこと。ということは MockServer の場合はレスポンスをストリームに突っ込んでるようなカンジ、と言えば良いのかな。
列挙してみる
以下?
- WidgetObservable
- doOnNext
- map
- filter
- debounce
- subscribe
- observeOn
- ViewObservable
- BehaviorSubject.create
では順に確認を。
WidgetObservable
Observable のメソドではありませんがこちらも確認。これは RxAndroid のクラスみたいです。View のイベントを受け取るため、ということで以下なソレが用意されている模様。
- ViewObservable.clicks でクリックイベント取得とか
- WidgetObservable.text で TextView の変更取得とか
- ListView の onScroll 取得のための listScrollEvents というものもある模様
これ、ドキュメントて無いんかな。どこやらの Javadoc は見れない。そして RxJava bindings for Android
なリポジトリを見つけたのですが、このあたりは別なナニにされてしまっているのかどうか、ソースも見当らない。
で、RxAndroid な Github の releases 見てたら http://github.com/JakeWharton/RxBinding に、という記載を発見。だがしかし、クラスの定義を見つけることができてません。
doOnNext
これも RxAndroid らしいのでパス。
map
これはストリームの要素一つづつに何かをする、というアレですね。lambda な手続きメソドが一つ引数もらって (それがストリームの要素)、その引数を加工して戻すのだったか。
filter
こちらは名前の通りで lambda な手続きが false を戻すとストリームから取り除かれるヤツ。lambda な手続きはストリームの要素な引数を一つもらってきて、それについて何らかの判定をしてその結果で true/false を戻せば良い、はず。
debounce
以下な記述なのですが
.debounce(500, TimeUnit.MILLISECONDS)
これ、500ms 間隔でストリームからの入力受付、なのかな。待つんじゃなくてステる的。
subscribe
Observer が渡される (はず)。ただ今見てるサンプルだと lambda が渡されているように見えますね。これは kotlin だからな模様。あと、Observer が居ないのですね。これって、Observable#onNext された時に subscribe に渡された lambda な手続きオブジェクトが呼び出されてる、ってことで良いのかどうか。
だとすると何となくイメージできるな。そもそもストリームな処理って SICP で (ry
observeOn
Observable がイベントを通知する先のスレッドを変更するメソドな模様。て、こんなことが簡単にできるのね。すばらです。そして subscribeOn というメソドもあり、こちらは Observable が subscribe されるスレッドを決めるものになってる模様。
なんとなく
イメージは深まっています。kotlin が lambda 使えるのも理解を早める一助になってる感あり。