以前にkotlinでAndroidするには?でググっていたら、kotlinAndroidLibというのがAndroidライブラリプロジェクトとしてgithubで公開されていました。
BatteryCrystalをkotlinで作り直した後に、試してみようと考えていたので、早速試してみました。
github: kotlinAndroidLib
使ってみたところ、コードが簡潔になってすごくいいです。
ただ、kotlinのバージョンが古いときに作られたライブラリプロジェクトで、現在はあんまりメンテナンスされてないようで、最初に使おうとしたら型チェックが通らなくてダメだったので、エラーになった部分は全部コメントアウトして使っています。ちなみにエラーになった部分はSQLite系やCursor系でした。
さて、kotlinAndroidLibを使った例を示します。
自分のコードで使っているので、IntentFilterをみせようと思います。
まず、Javaのコードです。
IntentFilter filter = new IntentFilter(); filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); registerReceiver(mReceiver, filter);
次に、kotlinのコード。
val filter = IntentFilter() filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION) registerReceiver(mReceiver, filter)
最後に、kotlinAndroidLibを使ったkotlinのコード
registerReceiver(mReceiver, IntentFilter{ addAction(WifiManager.WIFI_STATE_CHANGED_ACTION) })
ちょっとスッキリした感じに書けます。
次に、匿名クラスのBroadcastReceiver。
Javaだと以下のような感じですね。
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?) { // 処理 } }
さらに、kotlinAndroidLibを使ったら、こう。
private val mReceiver = BroadcastReceiver{(context, intent) -> // 処理 }
だいぶ簡潔になりました。
BatteryCrystalのapkのサイズを比較すると、
Java: 1.1MB
kotlin: 1.3MB
kotlinAndroidLib: 1.4MB
くらいだったので、Javaにくらべると多少大きくなるものの、今の端末の容量であれば全然問題ないんじゃないかなーと思います。また、kotlinを使っている人にとっては利点こそはあっても悪い点はないのではないかなーと思います。自分の場合はいまいちまだkotlinに慣れていないので、つまずくことがまだ多いですが、コードを簡潔に書けると楽しいので、それだけでも使ってみてよかったなと思います。