Javaで作成したプログラムをKotlinに変換してみた [Android Studio]

2022年2月6日

当サイト(kunimiyasoft)では、Androidアプリケーション作成にJava言語を使用しています。しかし、今のAndroid開発言語はKotlinに移行していて、需要にそぐわなくなってきています。

もうプログラマを引退している身としてはJavaのままで良いのですが、Kotlinにも触れる必要があると考え、AndroidアプリケーションのWF-CameraKotlinへコンバートしてみました。

※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」とついていますが、これがjavaKotlinの大きな違いの一つです。?を付けると、nullが許容された変数になります。

今回はコンバートした関係でしょうか、変数の後ろに「? = null」が多発していますが、本来は使うべきではないとのことです。(使わなくてできるのかは、記述時点では分かりません)

Kotlinはnullを極力避けようとしている言語だそうです。?を付けるとnullが使えるようになりますが、どうしても必要な場合に限るようにした方が良さそうです。

4.キャストの問題

コンバート後に問題として指摘された大部分は、キャストの処理でした。上記の例では、mTextureView を"!!“でnon-nullに変換して、toFloat関数で型を変換しています(良くない処理かな)。キャストは、場所によって"as“演算子を使ったり、臨機応変で対応しました。

やっぱり、nullの扱いに戸惑う場面が多いです。最初からKotlinで作った場合、null問題が少なくて済むのかもしれませんが、とりあえず機械的に対応しました。

5.コールバック関数のエラー

コールバック関数内のメンバ関数にコンバートエラーが多発しました。これについては、一度メンバ関数をコメント化して、新規にメンバ関数を追加した方が、早く処理できました。

6.Kotlinの感想

とりあえず、Kotlinソースをビルドして動作ができるようになりました。今のところ問題点はないようです。しかし、演算が正しく行われているのかが不安です。Kotlinでは最適な型で計算する仕組みがあるのですが、それが逆に不安を感じさせます。

今回のコンバートだけでは、Kotlinの良さをあまり実感できませんでした。これからKotlinを使うかと言われれば、使わないでしょう。私の場合は、Java以上に新しい開発言語には手を出さないつもりです。やっぱり、自分で確保して解放するというプログラム作りが、自分には合っています。

しかし、今からAndroid開発を仕事にする人は、積極的にKotlinを使うことが良いでしょうね。