Edited at

RxAndroid + retrolambda でお手軽にラムダでFRPを試す

More than 3 years have passed since last update.

まだまだ勉強中なんですが、RxAndroidでFRPとても楽しいです。


ラムダ式が使えるとJavaでもRxがイイ感じに書けるので、Androidに導入してみたら意外とお手軽だったので紹介します。


Rx面白いけど

RxAndroidを使えば、Androidの開発でもRxExtensionの恩恵を得ることができます。


しかし、冗長なんですね。。。匿名クラスを書き続けるの。。。

ここでラムダ書きたくなるんですが、Androidだと、2015年4月の時点ではまだJava8をサポートしていないので、ラムダできないんですね。


そこでretrolambda

retrolambda ってのは、所謂バックポーティングをやってくれるライブラリでして、いくつかのJava8の文法をJava7環境でも使えるようにしてくれます。

gradleでビルドするにはgradle-retrolambda が便利です


お手軽導入


  1. JDK8をセットアップします。


  2. プロジェクト/app/build.gradleにチョロっと書いてビルド。



build.gradle

//retrolambda

apply plugin: 'me.tatarka.retrolambda' // apply retrolambda plugin
android {
compileOptions { // set compliler level
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
repositories {
mavenCentral()
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.0.1'
}
}

// RxAndroid
dependencies {
compile 'io.reactivex:rxandroid:0.24.0'
}


詳しくはそれぞれのUsageを見てください。

retrolambda

RxAndroid


こんな感じ

例えば、Switchをタップした時に何かアクションしたい時なんかは、、、、


ラムダ無しのRxAndroidだけですと

なんか長い。。。

ViewObservable.clicks(switchObject)

.map(new Func1<OnClickEvent, CharSequence>() {
@Override
public CharSequence call(OnClickEvent onClickEvent) {
return ((TextView) onClickEvent.view()).getText();
}
}).subscribe(new Action1<CharSequence>() {
@Override
public void call(CharSequence t1) {
System.out.println(t1);
}
});


RxAndroid + ラムダ!!(+メソッド参照)

すっきり!

ViewObservable.clicks(switchObject)

.map(onClickEvent -> ((TextView)onClickEvent.view()).getText())
.subscribe(System.out::println);

と言う感じで導入もお手軽でコードもスッキリ!


参考

RxAndroidとRetrolambdaで大体Java8をAndroidに持ち込む

retrolambda

RxAndroid

※ RxAndroidは便利なんですが、まだVersion 0.24ということもあって結構インターフェースがコロコロ変わってるみたいです。

導入するときは注意した方がよさそうデス。

見てくださってありがとうございました。

Enjoy Rx