Blog ブログ

UniRxで非同期UI処理を書く -解説編 合成-

こんにちは。
プログラマの姫野です。

前回、前々回と続いてUniRxの基礎的な部分を紹介しました。
今回は発展的な使い方について解説してきたいと思います。

■ストリームの操作

今まで解説してきたストリームの使い方は、単純にボタンイベントが発生した時というものに限定していました。
要するに、ひとつのストリームをただ監視するだけ、というものです。

UniRxの真骨頂はストリームを監視することではなく、ストリームを操作することにあります。
これを使えるようになってようやく、UniRxを使うメリットとなります。

さて、ストリームの操作とは、具体的には以下のようなものです。

  • 合成
  • 射影
  • フィルタリング

データベースを扱っている方は目にしたことのある単語ですね。
まずは合成について解説していきます。

■合成

UniRxにおいての合成は主に「SelectMany」が使われることと思いますので、まず、このオペレータの紹介をしていきます。

このオペレータは

「引数に渡したストリームがonNextを呼び出すと次のオペレータに値を流す」

という動作をするので、

「あるイベントが発生した時に非同期処理を行い、完了まで待つ」

という処理が容易に実装できます。

この一文を見て、身近に感じるものはないでしょうか?
スマホアプリで、ボタン押してリクエストを行う処理に非常に似ていますよね。

実際には、以下のようなイメージで実現が可能です。(このままでは動かないので適宜置き換えをして下さい)

成功時、失敗時の処理が分けて記述できており、見た目、かなりスッキリしているかと思います。

余談にはなりますが、普通に実装した場合であれば面倒なリトライ処理が少し処理を追加するだけで可能なのも強みです。

リクエスト処理だけではなく、何かの完了を待って次の処理を行う、という処理はよく行われますので、このイディオムは頻出するかと思います。

■まとめ

いかがでしたでしょうか?
合成のオペレータは他にもありますが、数が多いので今回は割愛します。
需要がありそうなものがあればピックアップして紹介しようと思います。

次回はストリームの射影を紹介していきます。
お楽しみに。

採用情報

クラウドクリエイティブスタジオではプログラマを募集しております。
一緒に面白いゲームを作っていきましょう!