21
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-04-27

まだまだ勉強中なんですが、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

21
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?