Book: Kotlin in Action

Kotlin in Action を読んだ。けっこうよかった。

Kotlin はさして難しい言語ではなくオンラインの資料もあるので、本を読まずに適当にサンプルとかを真似ながらでも割と使える。なのでひやかし目的なら本はいらないと思う。Scala をやったことがあれば特に。

自分は育児の気晴らしで小さいアプリを Kotlin を使って書いている。そういう風に実際に使うとなるともう少し深く理解して損はなかろうと読んだ。その期待には答えてくれた。この本は丁寧に書かれているし、Kotlin の中の人が書いており authoritative という意味でも安心。1.1  の内容も少しだけ触れている。ただ async/await はでてこない.


Kotlin それ自体について。

モダン言語を一通りひやかした人にとって新しく学べる概念などはまったくない。だいたい Scala の無難でオーバーヘッドの少ないところだけ持ってきたようなデザインだから、サーバ側でわざわざ Kotlin を使うメリットは感じない。一方で Android プログラミングにおける Java の残念さをだいぶ打ち消してくれるので Android プログラマ的にはキラー言語だと思う。Kotlin の開発陣も Android での用途を重く見ているのは各所から感じる。

一通りチュートリアルを冷やかしただけだと気づかない面白い機能、いちばんは inline まわり。

まず inline function に渡した lambda の中で return すると、lambda  ではなく外側の inline function から return できる。まじで?おかげで inline function を制御構造に使う柔軟さが増す。Python にあった StopIteration を throw するダサさがない。でもちょっと狂ってるよな。

Inline function の reified type. Java の generics は type erasure で実行時には型が消えてしまうのだけれど、inline function では型の中身に依存できる。たとえば generic class を new できる。まじで?たしかに便利で、ライブラリたちも reified type に大きく依存している。

Outer return にしろ reified type にしろ、Kotlin の inline function は C++ のような単なる高速化のヒントではなく異なる機能を持っている。ちょっとぎょっとするけれど、便利でもある。

そのほか面白かったのは Java クラス相手の nullable の扱い。Nullable の概念がない Java からきた API は引数も戻り値も全て nullable にするのが理論的には正しい。ただ実用的にはかったるすぎるので、それらは platform types という特別な型になる。Platform types は Kotlin 側では Nullable としても Non-nullable としても宣言できる。 けっこう大胆な判断だけれど、まあ悪くない感じ。

個人的には nullable type はあってもなくてもいいと思っているけれど、Null handling まわりの頑張りで便利になってるのも事実だから嫌いではない。CoffeeScript 由来の safe call とか、ふつうにいい。

あとは細かいけど lambda に receiver を渡せるのも気の利いた syntax sugar だと思う。

全体的に無茶せずバランス重視でストレスのない言語だよ Kotlin. Java 混ぜるのも簡単だし、もう余暇アプリはぜんぶこれでいいわ。新しく学ぶ概念がないのは少し退屈だけれど、それは他でやります。