/var/log/messages

debugging with sixth sense

Kotlin-android-example

引き続き以下なリポジトリのソースを確認を。

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

以下な記述なのですが

1
        .debounce(500, TimeUnit.MILLISECONDS)

これ、500ms 間隔でストリームからの入力受付、なのかな。待つんじゃなくてステる的。

subscribe

Observer が渡される (はず)。ただ今見てるサンプルだと lambda が渡されているように見えますね。これは kotlin だからな模様。あと、Observer が居ないのですね。これって、Observable#onNext された時に subscribe に渡された lambda な手続きオブジェクトが呼び出されてる、ってことで良いのかどうか。

だとすると何となくイメージできるな。そもそもストリームな処理って SICP で (ry

observeOn

Observable がイベントを通知する先のスレッドを変更するメソドな模様。て、こんなことが簡単にできるのね。すばらです。そして subscribeOn というメソドもあり、こちらは Observable が subscribe されるスレッドを決めるものになってる模様。

なんとなく

イメージは深まっています。kotlin が lambda 使えるのも理解を早める一助になってる感あり。

Comments