kotlinでAndroidアプリを作り直したのでTipsを少々。

Google Playにkotlinで作り直したBatteryCrystalをリリースしてみました。
Javaで作られたアプリをKotlinで作り直して行く上で、とてもイライラもしつつも、面白かったです。

なので、kotlinでAndroidアプリを作るためのTipsを書いていこうかなと思います。
まぁ正直なところ、自分のための備忘録ですw

その前にアプリの紹介を少々。

BatteryCrystalは、バッテリーの残量を表示するウィジェットです。また、ウィジェットをタップすると、WiFiやBluetoothやGPSのON,OFFや、マナーモードの切り替えなどができます。ウィジェットがメインのアプリなので、普通のアプリとはちょっと違いますが、そのためいろいろと楽しめました。

Intentを作るには?

次のActivityを呼び出すために、Intentを作りますよね。しかし、kotlinではどうやればいいのかわからなくてハマりました。正解は、以下のようになります。

val intent = Intent(getApplicationContext(), javaClass<OtherActivity>())

定数を作るには?

Javaだと定数は以下のように定義します。

class MainActivity extends Activity {
    public static final String HOGE = "HOGE";
    private final String PIYO = "PIYO";
}

Kotlinでは、以下のようにします。

class MainActivity() : Activity() {
  private val PIYO = "PIYO"
  class object {
    val HOGE = "HOGE"
  }
}

staticメソッドを定義するには?

これも定数と同様に、class objectで定義します。
まず、Javaだとこうですね。

class MainActivity extends Activity {
    static public String hoge(String piyo) {
        return "hoge " + piyo;
    }
}

MainActivity.hoge(“piyo”); で呼び出しますね。

kotlinだとこうなります。

class MainActivity() : Activity() {
  class object {
    fun hoge(piyo : String?) : String? {
      return "hoge $piyo"
    }
  }
}

MainActivity.hoge(“piyo”) で呼び出せます。

匿名クラスを作るには?

バッテリーの残量が変わったらBroadcastが走りますね。それを拾うBroadcastReceiverをメンバ変数に定義しているのですが、それの定義方法を紹介します。
まず、Javaだとこう。

// mReceiverはMainActivityのメンバ変数とする
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @override
    public void onReceive(Context context, Intent intent) {
        // 処理
    }
}

kotlinだとこうなります。

private val mReceiver = object : BroadcastReceiver() {
  public override fun onReceive(context : Context?, intent : Intent?) {
    // 処理
  }
}

switch文を作るには?

kotlinには、switch文ではなく、whenをつかいます。
まずはJavaで。

String test;
switch(batteryState) {
    case 0:
    case 1:
        // 処理1
        test = "hoge";
        break;

    case 2:
        // 処理2
        // 複数行にまたがる処理
        String a = "pi";
        String b = "yo";
        test = a + b;
        break;

    case 3:
        // 処理3
        test = "fuga";
        break;

    default:
        test = "kotlin"
        break;
}

kotlinでは、こうなる!しかも、whenなので、戻り値を受け取れるので、こう書けます!
まるでRubyのcase文ですね。これだけですごくいいなぁ〜と思いました。

val test = when(batteryState) {
  0, 1 -> "hoge"
  2 -> {
    val a = "pi"
    val b = "yo"
    a + b // 最後のが戻り値になります
  }
  3 -> "fuga"
  in 4..10 -> "range" // 範囲を表すこともできる!
  else -> "kotlin"
}

kotlinで開発する場合は、IDEはIntellijだけになりますが、kotlinの開発元はIntellijを作っているJetBrainsなので、IDEで困ることはありません。また、IntellijでAndroidアプリを作るのに困る点も別にありません。よっぽどEclipseに慣れているということであれば別かもしれませんが…。

次に1から作るアプリはkotlinでやってみようかなと思います。


タグ Android, Kotlin | パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です