Javaで作成したプログラムをKotlinに変換してみた [Android Studio]
当サイト(kunimiyasoft)では、Androidアプリケーション作成にJava言語を使用しています。しかし、今のAndroid開発言語はKotlinに移行していて、需要にそぐわなくなってきています。
もうプログラマを引退している身としてはJavaのままで良いのですが、Kotlinにも触れる必要があると考え、AndroidアプリケーションのWF-CameraをKotlinへコンバートしてみました。
※kotlinを学習しないままコンバートしているので、対応が間違っている部分があるかもしれません。
1.Android Studioを最新にする
Kotlinを使うことから、Android Studioを最新にします。今まではKotlinの環境が揃っていない状態だったので、全て取り込むように設定します。
「Android Studio Bumblebee 2021.1」にアップデートしました。
2.JavaからKotlinへコンバートする
とりあえずは、一番上の階層、プロジェクトレベルでコンバートします。右ボタンメニューの一番下にある「Convert Java File to Kotlin File」を選択します。
確認のダイアログが出ますので、続行させます。
ところが、ある程度進むと、何もメッセージを出さずに終了してしまいます。各ログを見ても、何も出力されていません。
そこで、コンバートする階層を「Java」にします。今度はコンバートが進みました。
処理中に、上記のメッセージが出ました。問題があるようですが、「Yes」で処理を続行します。
他にもメッセージがあったかもしれませんが、記録を忘れました。コンバートを完了することができましたが、問題が残っています。
3.ソースを比較する
javaソースとKotlinソースを比較すると、違う点が多いですね。クラスの定義もそうですが、変数の定義が、大きく変更されています。
変数はvar/valで定義しますが、型を指定しなくても宣言できます。今回はJavaからのコンバートなので、型指定されている部分も多いです。
また、変数の型の後ろに「? = null」とついていますが、これがjavaとKotlinの大きな違いの一つです。?を付けると、nullが許容された変数になります。
今回はコンバートした関係でしょうか、変数の後ろに「? = null」が多発していますが、本来は使うべきではないとのことです。(使わなくてできるのかは、記述時点では分かりません)
Kotlinはnullを極力避けようとしている言語だそうです。?を付けるとnullが使えるようになりますが、どうしても必要な場合に限るようにした方が良さそうです。
4.キャストの問題
コンバート後に問題として指摘された大部分は、キャストの処理でした。上記の例では、mTextureView を"!!“でnon-nullに変換して、toFloat関数で型を変換しています(良くない処理かな)。キャストは、場所によって"as“演算子を使ったり、臨機応変で対応しました。
やっぱり、nullの扱いに戸惑う場面が多いです。最初からKotlinで作った場合、null問題が少なくて済むのかもしれませんが、とりあえず機械的に対応しました。
5.コールバック関数のエラー
コールバック関数内のメンバ関数にコンバートエラーが多発しました。これについては、一度メンバ関数をコメント化して、新規にメンバ関数を追加した方が、早く処理できました。
6.Kotlinの感想
とりあえず、Kotlinソースをビルドして動作ができるようになりました。今のところ問題点はないようです。しかし、演算が正しく行われているのかが不安です。Kotlinでは最適な型で計算する仕組みがあるのですが、それが逆に不安を感じさせます。
今回のコンバートだけでは、Kotlinの良さをあまり実感できませんでした。これからKotlinを使うかと言われれば、使わないでしょう。私の場合は、Java以上に新しい開発言語には手を出さないつもりです。やっぱり、自分で確保して解放するというプログラム作りが、自分には合っています。
しかし、今からAndroid開発を仕事にする人は、積極的にKotlinを使うことが良いでしょうね。