ひよっこゲームブログ

なにもかも初心者のひよっこがゆったりと何かする

リアクティブプログラミング9日目

あーるえっくす じゃばーーー

Operatorの命名規則

使用できないキーワード

元のRx.NETで使ってた名前はJavaですでに使われていたのでダメだったという話

singleなアイテムを発行~完了するOperatorはReturn(T)という名前だった
return(T) ⇒ just(T)

そのほか
switch ⇒ switchOnNext
Catch ⇒ onErrorResumeNext


型消去

型消去 is 何?

型消去 = 「イレイジャ」と呼ばれる
Javaの機能でこれについて書くと記事が1つできるレベルなのではしょると

コンパイラによってパラメータ化された型や型引数を含まない型に変換された物(あいまい)
ex.) List<String>のイレイジャはList

型消去で色々起こるので、まぁ何とかしようとかそんな感じの項目
下記のコードはダメみたい

サンプルコード

Flowable<R> flatMap(Function<? super T, ? extends Publisher<? extends R>> mapper)

Flowable<R> flatMapMaybe(Function<? super T, ? extends MaybeSource<? extends R>> mapper)



Java8とラムダを使っている場合は曖昧で色々起こる可能性がある(キリがないのではしょります)

サンプルコード(concatWithの場合)

Flowable<T> concatWith(Publisher<? extends T> other);

Flowable<T> concatWith(SingleSource<? extends T> other);



ラムダ式のインターフェース

サンプルコード

someSource.concatWith(s -> Single.just(2))
.subscribe(System.out::println, Throwable::printStackTrace);



このときSingle.just(2)は機能しない
concatWithのOverloadの種類が多すぎてコケる

正しくは下記のように書く

サンプルコード

someSource.concatWith(Single.defer(() -> Single.just(2)))
.subscribe(System.out::println, Throwable::printStackTrace);



場合によってはフローでもコケるので下記のように書く

サンプルコード

Flowable<T> merge(Publisher<? extends Publisher<? extends T>> sources);

Flowable<T> mergeArray(Publisher<? extends T>... sources);



うーーーーーん。理解度が微妙だけど言いたいことはなんとなくわか・・・る・・・?
なんかこれも詰まった時ににらめっこ案件だな

正直今までで一番内容がふんわりしている・・・
理解したとは言い難いが立ち止まっても進まないので頭の片隅に置いておこう

今日はちょっとここまで、続きは明日