DroidKaigi 2017 に登壇しました

DroidKaigi 2017 で「全て S になる -RxJava と LWS を持ち込む楽しさ-」というタイトルの発表をさせていただきました。

全てSになる -RxJavaとLWSを持ち込む楽しさ- from Ryutaro Miyashita

ちょうど 1 年前に Android N Preview 1 が登場し、同時に Jack を使って Java 8 を使った Android アプリ開発が行えるようになりましたが、 Stream API や Optional API は minSdkVersion 24 からと、非現実的な設定が必要でした。まだ Android 7.x は 3% 未満のシェアしかありません

しかし、 Retrolambda で Java 8 の言語機能を手に入れ、 Lightweight Stream API で Stream API / Optional API を手に入れ、 RxJava でより良いアーキテクチャを手に入れることができるということを今回伝えたくて発表を行いました。

RxJava も Lightweight Stream API も Fluent Interface となっていて、頭の中で考えた処理の順番をそのままコードに表現しやすいメリットがあると考えています。また、手続き的なコードから宣言的なコードになりやすいため、変数を final にして不変で安全なコードも書きやすいです。

// Before
FragmentManager fm = getSupportFragmentManager();
Fragment f = fm.findFragmentByTag("MY_FRAGMENT");
MyFragment mf;
if (f != null && f instanceof MyFragment) {
  mf = (MyFragment) f;
} else {
  mf = MyFragment.newInstance();
}

// After
final Fragment fm = getSupportFragmentManager();
final MyFragment = Optional.ofNullable(fm.findFragmentByTag("MY_FRAGMENT"))
  .select(MyFragment.class)
  .orElseGet(MyFragment::newInstance);

また、 RxJava の結果通知を Either 型を使って行うことで、

の 3 種類を Observable / Flowable の .subscribe で受け取れる件も話をしました。 Either 型を定義するときに Optional を使うことで「値が無い」ことを型として表現できるメリットがあります。

Optional を使った Either 型のコードは Gist に掲載しています

webApiRequest
  .subscribeOn(Schedulers.computation())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(either -> either.apply(
    failure -> {}, // 意図した失敗
    success -> {}), // 成功
    error -> {} // 意図しない失敗
  );

View の各種イベントも RxBinding で Observable Stream に変換することができますし、 HTTP リクエストも Retrofit といったライブラリが既に RxJava 対応しています。つまり、 View も Business Logic も、 Android アプリ内のコード全てが Stream になる……という思いを込めて、今回のセッションタイトルとしました。

反省点としてはスライドにコードが多く、細かすぎて言葉では伝えづらかったこと、事前リハーサル通りに全く話せなかったことがあります。もし、来年も CFP を出すことがあり、それが通って話すことができるようであれば、反省点を活かしてよりよい発表ができるように努めます:)

 
2
Kudos
 
2
Kudos

Now read this

完全栄養飲料 Comp レビュー

ソイレント ソイレントというアメリカで有名な栄養機能食品があります。人が生きるために必要な栄養素が全て含まれていて、従来の食事の代わりにソイレントを使うことで、食事の手間から解放されるという未来的な商品です。 発売当初は粉末タイプのものが売られていて、自分で粉末を水に溶かして飲むというものだったのが、今ではドリンクタイプのものも併売されているようです。 発表当初からソイレントには興味を持っていました。 というのも、... Continue →