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でやってみようかなと思います。
