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文の戻り値など、ベンリ文法がいっぱい
Tags: android

*1 Android Studioの機能で自動変換できる