2016-04-13 [長年日記]
Javaで記述されているAndroidアプリをKotlinに置き換えてみた
そろそろJava面倒だよね…。ってなっていたので、Kotlinのバージョンが1.0.0になったときに試しに自作のアプリをKotlinに置き換えてみようと試行錯誤したのだけど、JavaとKotlinのコードが混在している状態ではAndroid Studioでのビルドが遅く、ストレスフルだったのでそのまま放置していた。Android Studio 2.0が正式にリリースされたタイミングで再度試してみたところ、混在状態でも現実的な時間でビルドしてくれるようになったので、再チャレンジしてみた。
基本的にはAndroid Studioのメニューから[Code]-[Convert Java File to Kotlin File]を選択し、 .javaのコードを.ktに変換、一部手動で修正して動作確認というのを繰り返した。元のコードでは、RetroLambda、RxJava、RxAndroidを導入していて、ラムダ式による記述があるのだけど、これは一旦無名関数による記述に直して*1から変換すると、かなりの精度でKotlinのコードを生成してくれる。
その他気になったのは、以下の点
- Activityやカスタムビューを変換した場合は、再ビルドが必要
- なにか変だなと思ったら再ビルドすると解決することが多い
- パブリックなクラス変数はcompanion objectになるけど、Javaでの参照元は連動して修正されない
- HogeClass.Companion.getXXXX()みたいな感じにする必要がある
- Javaからの変換では、nullableな変数はとにかく!!演算子によるアクセスになるので、コードの意味を考えて?に置き換えたりする必要がある
Android Studioによるコード変換が優秀なので、それほど手間をかけずに変換はできた。コード量としては、行数換算で約15%減少、文字数でいえばもっと少なくなっていると思う。
$ git diff --shortstat master
66 files changed, 2229 insertions(+), 2624 deletions(-)
今回は新規のコードを書いていないのでアレだけど、変換されたコードを眺めた感じではシンプルに記述できそうな気はするので、既存のコードの置き換えはコスト見合いとしても、新規のコードはKotlinで書いていくというのはありだと思う。
- whenベンリ
- if から書き換えるとすっきりするパターンがある
- ?: や if文の戻り値など、ベンリ文法がいっぱい
*1 Android Studioの機能で自動変換できる