久々の投稿!
お久しぶりです。今年度始めにはよく勉強会向けの記事を投稿していましたが、最近はめっきり投稿していませんでした。主にアプリの開発を行っていてアウトプットをすっかりしていなかったのですが、このadvent calendarを機会に少しずつandroidエンジニアのためになる記事を投稿していけたら、と思います。
kotlinを書かなければいけない理由
早速本題に入っていきます。
まず考えられる「書かなければいけない理由」
別に書きなれているJavaで書けばいいんですよ。私もそう思ってました。
私なんかはJavaもまだ二年目で対してキャリアもないですがjavaであればキャリアを積んでいる人はたくさんいるでしょうし、android開発の言語的利点はjavaは情報がとても多い、というところもあるでしょう。
簡単に言えば、書かなければいけない理由は「GoogleとOracleのJava裁判」によってもしかしたらandroidが今後Javaを捨てるかもしれない、という考えから次に代わりになる言語は何だろう、といったところです。
ちょっと私には難しい内容なのでざっくりとしか読んでいませんがOracleとGoogleの判決文を斜め読むが上の「googleとOracleのjava裁判」についてです。
じゃあ僕たちが次に書くべき言語は何か
まさかのGoogle製のGoLang!?
実はあり得ない話ではなかったんです。
Go support for Android
こちらにそのようなことが書かれています。
しかし、JavaのAPIにとGoLangの間での互換性がなさ過ぎて少なくとも、すぐには無理。おそらく不可能、といった具合。
そこで...kotlinに目が付いたわけです。
なんだよ急に!?
実は急ではないんですkotlinさん。
2011年頃登場した言語で、オープンソース。同じくJVM言語であるScalaやGroovyを意識した作りに。
利点は簡単、
- Javaとの相互互換が完璧
- 純粋なjavaと大差ない実行速度(コンパイル速度)
- Javaより安全(nullがない)
Kotlinを作った会社はJetBrainsです。
どこかで見たことないですか?IntelliJシリーズの会社です。
AndroidStudioはIntellJをベースに使われています。
これがすごい意味があって拡大解釈すると、
Google が JetBrains を 認めている !
ということになるのではないでしょうか!?
書いたほうがいい理由
上までに書かなければいけない理由を書いてきました。
書いたほうがいい理由も書いていきましょう。
(繰り返しになることもあるかもしれません)
- Javaとの親和性の高さ
- 正式版公開
- 言語仕様
- ぬるぽ無し
親和性については言わずもがな。
正式版については現在は1.0.0-Candidate -> Beta -> Beta2と11月までに来ています。
新年度前までには正式版が出てくるでしょう。正式版が出るということはkotlinが言語としての完成度や安定度がある、と見れるでしょう。
そうでなかったとしてもJetBrainsはIntellJの完成度を見れば言語への理解が高いので安心できるでしょう。
言語仕様
Kotlinは簡潔、安全といったところがよくあげられます。
まずは簡潔。これは比較対象がJavaなのが一番大きいですが最近のモダンな言語にかなり近いです。(型推論や関数リテラル)
Javaで書くと冗長的になり気分的に辛いものKotlinでは解消できます。
そして安全面。
KotlinはJVMで動くコンパイラ言語なのでソースコードの誤りを実行前に気づけます。具体的に言うと、実行可能コードのみしか動かないので安全、というべきでしょうか。
そしてJavaと比較したときにKotlinは静的片付けを行ったり参照型の取り扱いが違います。簡素と安全性の両立が非常にできている、と言えるでしょう。
ぬるぽの無し
Javaを書く以上どんなに気を付けていても避けては通れない...
Null SafetyがKotlinでは頑張ってます。
Kotlinに完全移行すべきか
結論から言えば
まだ早い
かな、と思います。
良い言語の定義はそれぞれかと思いますが私は、
- ドキュメントの成熟
- 関連の質問が増える(Stack Over Flow 等)
- 日本語情報の成熟(これはまぁあったらいいなくらい)
- ライブラリの増加
という部分がまだまだかなと思います。
終わりに
Kotlinは導入も楽です。(そりゃIntellJなのでもちろんなんですが)
皆もちょっとずつ移行の香りを匂わすのはいいかもしれませんね。
100%Kotlinである必要もないですし、ハイブリッドでも。