イニシャルがリムーブ

楽しいことならいっぱい夢見ることならめいっぱい

RxKotlin2.2.0での注意点

ギリギリ前回から2週間以内。あまり重く考えず、会社の休憩中に書いていきます。

RxKotlin

軽く紹介すると、RxJavaはRxのJava実装ですが、RxKotlinはRxのKotlin実装ではなく RxJavaに便利な拡張関数を追加できる軽量ライブラリです。

約一ヶ月半前のことです。バージョン2.1.0のリリースノートを見て、「最高かよ…」と思い 用法用量を社内コンフルにまとめて、さっそく実務投入しました。

そして12月に差し掛かったある日。

f:id:rmakiyama:20171218142733p:plain

困ったというかビックリしました、、

2.2.0での注意点

バージョン2.2.0のリリースノートに書かれたことが全てです。

(個人的に)大きく変わったところは、singlemaybeto~メソッドが削除されたところです。

// hoge()の処理からSingleを生成
Single.just("hoge")

// RxKotlin 2.1.0
"hoge".toSingle()

簡易的にSingleMaybeを生成する場合に重宝するかなと思っていた部分だったのですが どうやら他のライブラリなどと競合する部分もありなくなったようです。

あまりいないかもしれませんが、使っている方は注意。

私の2.1.0での勘違い

指摘されるまで気づかず使っていたのですが、toSingle()メソッドの定義は以下のようになっていました。(2.1.0では)

// ver.2.1.0 -> https://github.com/ReactiveX/RxKotlin/blob/2.1.0/src/main/kotlin/io/reactivex/rxkotlin/single.kt
fun <T : Any> T.toSingle(): Single<T> = Single.just(this)
fun <T : Any> Future<T>.toSingle(): Single<T> = Single.fromFuture(this)
fun <T : Any> Callable<T>.toSingle(): Single<T> = Single.fromCallable(this)
fun <T : Any> (() -> T).toSingle(): Single<T> = Single.fromCallable(this)

あるメソッドをストリームに載せたい場合に安易に

hoge.toSingle()

としていたのですが、これではSingle#justメソッドが呼ばれるためストリームに乗らないのでした。 勝手にSingle#fromCallableが使われていると思っていました。とんだ間違いでした。。

※ 現在(ver 2.2.0)はtoSingleメソッドは一掃されて存在しません。

まとめ

  • ライブラリアップデートでBreakingな変更はウォッチしよう!
  • ライブラリは内部実装もある程度読んで、動きを把握した上で使おう!