SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

RxJavaによるリアクティブプログラミング入門

RxJava(2.x)の便利なオペレータ(結合/ユーティリティ/デバッグ)

RxJavaによるリアクティブプログラミング入門(6)

  • X ポスト
  • このエントリーをはてなブックマークに追加

デバッグ用のオペレータ(1)

 ユーティリティ系のオペレータの中には「do」で名前が始まるいくつかのオペレータがあります。これらは各通知時に実行され、引数には戻り値がない(void)関数型インターフェースを受け取るようになっています。つまり、これらのオペレータは各通知時に何らかの副作用(オブジェクトの状態を変えたり、生産者―消費者間の外部に影響を与えたりすること)を起こすことを意味します。しかし、RxJavaでは基本的に受けとったデータを使って副作用を起こすことは消費者側で行うことを前提としています。

 しかし、さまざまなオペレータを経由しているFlowable/Observableの場合、途中でデータにアクセスできないと、元のデータがどのように変更しているのかを把握することが難しくなり、また、オペレータ内でデータを使って何らかの処理をしているコードの中で、デバッグのためのログを出力するような実装を入れることは、あまり好ましいことではありません。そこで、この「do」で名前が始まるオペレータを使って、各通知が行われる際にログを出力するようにすることで、ビジネスロジックを行うコードとデバッグを行うためにログを出力するコードを分割することができるようになります。ここでは、このような「do」で名前が始まるメソッドの中から代表的なものとして次のものを見ていきます。

  • doOnNext
  • doOnComplete
  • doOnError
  • doOnSubscribe
  • doOnRequest
  • doOnCancel/doOnDispose

 ちなみに、これらのオペレータをビジネスロジックとして使うことは可能ですが、本来は消費者側で行えることをこれらのオペレータで行うことは単に複雑さを増すことになるため、基本的にはビジネスロジックに影響を与えるような使い方は避けたほうが良いでしょう。

 また、ここでは、これらのオペレータのマーブルダイアグラムを公式のJavaDocのものから変えているので、わかりづらい場合は公式のJavaDocも参照してください。

doOnNext

マーブルダイアグラム
マーブルダイアグラム
メソッド
  • doOnNext(Consumer<? super T> onNext)

 doOnNextメソッドはFlowable/Observableがデータを通知する際に、引数に指定した関数型インターフェースの処理を行わせるメソッドです。実装する、関数型インターフェースのメソッドの引数に通知するデータが渡されるため、どのようなデータを受け取ったのかを確認することが可能です。

doOnComplete

マーブルダイアグラム
マーブルダイアグラム
メソッド
  • doOnComplete(Action onComplete)

 doOnCompleteメソッドはFlowable/Observableが完了を通知する際に、引数に指定した関数型インターフェースの処理を行わせるメソッドです。実装する、関数型インターフェースのメソッドの引数には何も渡されません。

doOnError

マーブルダイアグラム
マーブルダイアグラム
メソッド
  • doOnError(Consumer<? super Throwable> onError)

 doOnErrorメソッドはFlowable/Observableがエラーを通知する際に、引数に指定した関数型インターフェースの処理を行わせるメソッドです。実装する、関数型インターフェースのメソッドの引数には通知するエラーオブジェクトが渡されるため、どのようなエラーオブジェクトを受け取ったのかを確認することが可能です。

doOnSuscribe

マーブルダイアグラム
マーブルダイアグラム
Flowableのメソッド
  • doOnSubscribe(Consumer<? super Subscription> onSubscribe)
Observableのメソッド
  • doOnSubscribe(Consumer<? super Disposable> onSubscribe)

 doOnSubscribeメソッドはFlowable/Observableが購読されて処理を開始する準備ができた際に、引数に指定した関数型インターフェースの処理を行わせるメソッドです。消費者(Subscriber/Observer)のonSubscribeメソッドを呼ぶ際に実行されます。実装する、関数型インターフェースのメソッドの引数にFlowableの場合はSubscription、Observableの場合はDisposableが渡され、これが最終的にSubscriberのonSubscribeメソッドに渡されます。

doOnRequest

マーブルダイアグラム
マーブルダイアグラム
メソッド
  • doOnRequest(LongConsumer onRequest)

 doOnRequestメソッドはFlowableがデータ数をリクエストされた際に、引数に指定した関数型インターフェースの処理を行わせるメソッドです。実装する、関数型インターフェースのメソッドの引数には、リクエストしたデータ数が渡されるので、リクエストしたデータ数を確認することが可能です。また、このメソッドはバックプレッシャー機能がないObservableにはありません。

次のページ
デバッグ用のオペレータ(2)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
RxJavaによるリアクティブプログラミング入門連載記事一覧

もっと読む

この記事の著者

須田 智之(スダ トモユキ)

十数年間おもにSI企業にシステムエンジニアとして携わり、現在はフリーランスに。企業向けのシステム開発のかたわら個人でのモバイルアプリの開発やIT分野の記事も執筆。RxJava 2.0に対応した著書『RxJavaリアクティブプログラミング』が2017年2月16日より発売中。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9974 2017/02/23 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング