potatotips #26でKotlinを使っていて思っていたことについて発表してきました
potatotips #26でKotlinを使っていて思っていたことについて発表してきました。
発表内容について
まず、自分はKotlinを選定していないし、Javaでの経験がしっかりあるわけでもないので、選定理由らしいものをそれらしく言うのは違うな、というか、正直、ずっとKotlinで書いていたものの、プラスの意味で選定理由がよくわかりませんでした。
それで、改めて何がよかったところはないか振り返ってみよう、みたいな感じで発表しようと決めました。
その時点で、対象としていたのは、Kotlin導入しようと張り切っている人やv1.0が出て本格的に検討している人たちであり、あなた方に布教される側ってこんな感じで思ってたよ、ということを言いたいな、というところからスタートしたのでした*1。
で、この発表や懇親会で言いたかったことは
- KotlinってKotlinがすばらしい!って布教する目的のない気の抜けた感じの人からしても書いてて気持ちいいよ!
- 特にViewのところや、コールバックと合わせて使うとかなり書く時間(と読む時間)が削減できるよ*2
- mix-inとかクラス拡張の考え方が色々あって、バックエンド*3と近い考え方でもでき、Swiftとも近いものがあるよ
- 小さいチームで1人が複数プラットフォームを担当するようなときはスイッチングコストが少し小さくなるよ
- 補完を待たずにサクサク書き進められるからまとまった機能を開発する時等ガリガリ新規コード書いていく時は速い
- Java8は当分先だから今年は安心して使ってていいと思う
- 他のライブラリ(RxJava系, Realm等)もKotlinを意識したリリースしてきてますし
でした。
まあ、いささか立場が極端なのでポジショントークのネタ枠ではありますが、ありがたいことにKotlinに対してもっと正確で詳しい資料はもう溢れていますから、そちらをご参照下さい。
私ももっと勉強します...。以下、余談です。
5分で入らなかったので資料に書いてないことなど
ミックスインとか各種文法、Scalaでできない?
できると思います*4。
コンパイルが遅すぎる、Android Studioのデフォルトで対応していなかった*5ということもあり、Scala in AndroidはKotlinほど燃え上がっていないのかな、という印象です。
Kotlinはどうして燃え上がっているかというと、個人的な見方では Scalaより小さいためビルドが速いことと、IntelliJが開発しているという安心感、他のライブラリと使っていて快適な面が多い*6ためかと思われます*7。
たとえば、元々SAM変換が最近流行りのRx系と相性がよくて時期も比較的近く、またRealmなどでもKotlinがサポートされるようになっています*8*9。
Kotlinで書けなかった(書いてない)クラスは?
Kotlinで書けなかったクラスはCustomViewの一部とFacebook SDK、書いてないのはRealm周りです。
たしか、CustomViewの方は途中でInflator#inflate
メソッドがコンパイルできなくて諦めました。
ためしにJavaに直してみたらコンパイル通りましたし、個人的に個々でカスタマイズ性の強いクラスはKotlinのうまみ少ないなーと思っているので、もうそれでいいかと思ってJavaで書いています。
後はFacebook SDKを扱うクラスが、なぜかKotlinではコンパイル通らなかったため、その周辺もJavaで。
RealmはいまではKotlinで書けると思いますが... 急がなくてもいい気持ちが...
怒られそうではありますが、基本的にKotlinは楽しく速く開発するための道具なのだというスタンスなので、Kotlinで大変な部分はJavaでいいや、相互呼び出し容易だし、という気持ちです。
おまけにあるような、自動変換をする程度のKotlinは意味があるか?
全くないわけではないです。
拡張メソッドやミックスイン、関数オブジェクト、名前付きパラメータと言ったKotlinらしいことをするにはそれらの要素を呼び出すクラスがKotlinである必要があります。
そうすると一クラスだけKotlinというわけにもいかないので、とりあえずKotlinにしてしまうために楽ができてよいかな、と思います。
また、逆にある程度はJavaに自動的に戻れますし、とりあえずテスト導入して感覚を測りたい時とかにおすすめ。
Java勉強してる?
前回参加したぽてちから少しずつEffective Java読んでます。
半分くらいだけど、お作法的な部分についてはKotlinの考え方と悩みつつ、進めてます。
他に使っているライブラリについて
他にもありますが、主なものは、
RxJava, RxAndroid, Realm, Picasso, Retrofitなど。
だいたい先輩の置き土産で、書き心地よいのでそのまま使っています。ありがたい環境です。そろそろバージョンアップしなきゃ...。
バージョンアップ対応について
自分が体験したのは、0.13.1514
から1.0.0-beta-4589
。
コードの修正自体は、Android Studioのビルドでエラーが出た箇所をクリックしては美醜せいしていく簡単なお仕事でした。作業時間2時間くらい。
1.0.0-rcも出ているので、今後は減ると思います。
コンパイル遅い?に?がついているのは?
遅い遅いといわれる割に、ある程度の規模でKotlinとJavaでのビルド時間を比較しました、という話が探しても出て来なかったからです。
正直、Kotlinだから、というより大きめのライブラリをいくつか使っていてMultidexだから重い気がしなくもないです。
なので、とりあえず資料には時間書いておくことにしました。
さて、プロダクト自体まだまだ成長させないといけない状態なので、まだまだ頑張ります...。
*1:変な動機
*2:ビルド時間はやや重?
*4:http://www.atmarkit.co.jp/ait/articles/1206/20/news137.html
*5:http://www.slideshare.net/saturday06/pixiv0905x2
*6:そういったライブラリと流行り出すタイミングが一致した
*7:もちろん、エヴァンジェリストの @ngsw_taro さんなど、熱心に布教や勉強会を行っている方の存在が大きいです
*8:http://qiita.com/chibatching/items/affe9efa580116beb04d
*9:https://github.com/realm/realm-java/tree/master/examples/kotlinExample