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

Samsung Galaxy S7 レビュー

MWC で発表されてから欲しいと思っていた Samsung Galaxy S7 を買いました。購入元は 1ShopMobile です。しばらくは Gold モデルしか無かったのですが、巡回中に全色在庫が復活したのを見て、そのまま Black Onyx をポチりました。 1. ハードウェア デザインは前作 Galaxy S6 から大きく変わっていませんが、カメラの出っ張りが小さくなり、 micro SD カード対応が復活し、IP68 の防水・防塵まで付いています。... Continue →