まだまだ勉強中なんですが、RxAndroidでFRPとても楽しいです。
ラムダ式が使えるとJavaでもRxがイイ感じに書けるので、Androidに導入してみたら意外とお手軽だったので紹介します。
Rx面白いけど
RxAndroidを使えば、Androidの開発でもRxExtensionの恩恵を得ることができます。
しかし、冗長なんですね。。。匿名クラスを書き続けるの。。。
ここでラムダ書きたくなるんですが、Androidだと、2015年4月の時点ではまだJava8をサポートしていないので、ラムダできないんですね。
そこでretrolambda
retrolambda ってのは、所謂バックポーティングをやってくれるライブラリでして、いくつかのJava8の文法をJava7環境でも使えるようにしてくれます。
gradleでビルドするにはgradle-retrolambda が便利です
お手軽導入
-
JDK8をセットアップします。
-
プロジェクト/app/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