Kotlinを使っていて感じるつらさ

Last Update: 2019-09-08

ちなみにこの記事を書いたのはかなり昔のことなので、今はだいぶ環境が変わっている。マシンスペックによる辛さも含まれていたので、現在ではだいぶ解消されていると思って読んで欲しい。

なにせ3年もまえの記事だからね・・・あんまり真に受けないように。19年時点の私はだいぶKotlinラバーですから。

Kotlin便利というか、今更Javaに戻れないってくらいに魅了されてはいるのだけど、一方でKotlinを使うことで感じるつらさもいっぱいある。

ビルドが遅いってのはよく言われてる。実際遅いと思う。そりゃJavaで書いた時よりKotlinの処理が更に乗っかるわけだからビルドは遅い(Javaに比べて)。

ただ時間的な問題より、ビルドが安定しない方が個人的には困る。さっきまで普通に動いてたのに、コード書き換えたらビルド通らなくなる→書き換えたコードを元に戻す→やっぱりビルド通らない、なんてことがわりとある。このパターンに出くわすと、プロジェクトをクリーンするとだいたいうまくいくことが多い。ただ、そうなったときに毎回クリーンする手間と、その次のゼロからのビルド時間が長いことが微妙にストレスなのである。

この現象も必ず起こるわけではなく、では一体何をキッカケにおこっているのかがよく分からない。結果、Kotlinのビルドが不安定であるというイメージに行き着いてしまう。kaptを使ったりしていると特に顕著な問題だ。

また、ネットでKotlinについて調べると古い情報が出てくる問題もある。過去の仕様ではこう書いていたけど、今は書き方が異なっていることがいくつかある。例えばIntentなんかでJavaのクラスを指定するときの書き方とか。公式リファレンスを見ろっていう話なのだけど、そこだけではわからないこともあって、そんなときに地味に困る。

後は初めてやること(Javaでもやったことがないこと)をいきなりKotlinでやると地味にハマる。そもそものライブラリやAPIの使い方が間違っているのか、それともKotlinだとうまく使えないのかが判断つかないからだ。

例えば今回ハマったのはこんなの。

https://github.com/gen0083/SampleKotlinConstructor

カスタムプリファレンス(といってもEditTextの値をIntで保存するだけのもの)を作ったのだけど、@JvmOverloadsを使ったコンストラクタだとうまくいかない問題に遭遇した(もしかしたら私のJvmOverloadsの書き方・使い方が間違っていただけなのかもしれない)。原因が分からず、最終的にコンストラクタを普通に3つ定義してやったら普通に動いた。

そんなこともあって、初めて挑戦する分野はとりあえずJavaでやった方がいい気がしている。Kotlinでいきなりやってもうまくいく場合もあるので、そんなに神経質になる必要もない気もするが、ハマりまくった挙句にKotlinのせいでしたとなったときの徒労感はハンパないのは確か。

じゃあJavaでやればいいじゃんという話なのだけど、Kotlinで書くスムーズな感覚はやっぱり病みつきでして。

でも一方で無駄にはまってる時間のほうが多い気もしているのは事実。今作ってるやつが完成したら、つぎはJavaで作ってみようかなと思っている。