目次
始めに
UniRxは昔触ったことはありましたが、機能や使う利点がわからず長い間毛嫌いしていました。
しかしそうもいかず、今回はこちらの本を一通り読んで個人的にUniRxについての認識を簡単に図にしてまとめようと思います。
UniRxについて知らない方はこちらを参考にしてください。とても丁寧にまとめられています。
※注意
今回の内容では処理の内容や詳細ではなく、UniRxに対する認識をまとめたものとなります。
UniRxについて全くの無知の私がまとめた内容になるので、間違いや誤った解釈があるかもしれませんがご了承ください。
Observable・Observerについて
observeの意味
observeは監視する、観測すると言う意味を持ちます。(引用:英語「observe」の意味・使い方・読み方)
プログラム的な読み方としてはこの意味で間違っていないと思います。
Observable
observableはobserve + ableで観察できると意味を持ちます。
個人的な認識で言えばポストみたいなものと考えています。
このポストにメッセージが入るとそれを通知します。
Observer
observerはobserve + erで観察者を意味します。
Observableに何かしらが入ったときにそれを受け取ってその内容を処理するものと個人的に認識しています。
使用する流れ
まず、Observableは誰に入ってきたメッセージを送るかを登録します。
この後にObservableに何かしらのデータが入るとその登録したObserverにそのデータが送られて、Observerが処理を実行します。
Operatorについて
ObservableからObserverにデータを渡す間に処理を加えることが出来ます。
これによって、送るデータを制限したり加工できます。
その例をいくつか紹介します。
Where
Whereを途中に挟むことで、送られるデータをフィルタリングできます。
例えば、値の範囲外を除外したり特定の値のみを通すことが可能です。
Select
Selectは受け取ったメッセージを加工してObserverに渡したり、別のデータを渡すことが可能です。
SelectMany
SelectManyでは2つの使用方法があります。
1つ目は1つのメッセージから複数のメッセージに加工するものです。
2つ目は1つのメッセージから新たにObservableを作り、直列につなげるものです。
新しく作られたObservable(図では配達所)に通知が来ると、登録されたObserverにデータが送られます。
どのような時に使われるか調べてみたところ、WebRequestなどの非同期処理などで使われるようです。
Observableから1度しかメッセージが来ない場合はContinueWithの方が効率的に動作します。
Merge
Mergeを使うことによって、複数のObservableを1つのObservableに変換できます。それによって、どれか一つのObservableがメッセージを送ると登録されているObserverは処理を実行します。
ただし、送られるメッセージの型は統一する必要があります。
Zip
Zipでは複数のObservableからのデータを1つのデータにまとめて、Observerに通知できます。
ZipはそれぞれのObservableからのデータが揃わないとObserverに通知しないので注意してください。
Zipに似たOperatorでZipLatest, CombineLatest, WithLatestFromなどがあります。
最後に
今回はUniRxについて簡単にまとめました。
まだ勉強したばかりなので、Hot&ColdやObservableの破棄などについて詳しくありません。なので、これから実際に使ってみて何か新しい学びがあったらそれをまとめていこうと思います。