はじめに
こんにちは、モバイルエンジニアの河本です。
2019年8月24日(土)に「Kotlinを愛でる」ためにKotlin Festというカンファレンスに参加してきました。
https://kotlin.connpass.com/event/129860/
遅くなりましたが、参加したときのメモと、感想を書いておきたいと思います。
基調講演
Jetbrains社のisacovaさんのWhat’s new in Kotlinというタイトルで基調講演
スライドはこちらhttps://speakerdeck.com/svtk/whats-new-in-kotlin
気になったところだけ。
- 新しい機能を変更することを恐れないという。
- 十分な時間をもって快適にバージョンアップしたい。
- マイグレーションは自動でできるにしていくつもりとのこと。
- KEEP(Kotlin Evolution and Enhancement Process)というKotlin言語に対するプロポーザルを管理するリポジトリある。
- これによりコミュニティと対話しながら改善。
- Experimental機能について
- フィードバックをもらうことによって、最終製品をより良い物にするためで、最先端のものではない。変更するがある。
- ライブラリの一部を実験的に試すことができるが、サポートはない
- 具体的なExperimental機能の紹介
- Inline class
- Contract
- Immutable collection
- Flow
- Multi Platform Projects
コルーチンを理解しよう
次に聞いたのは 13:30 コルーチンを理解しようです。
スライドはこちら https://speakerdeck.com/sys1yagi/kotlin-korutinwo-li-jie-siyou-2019-kotlinfest2019
コルーチンとは、
- 中断と再開という概念を取りいれたもので、別スレッドで動かすことができます
- Javaのスレッドは1MB〜2MBのメモリを使うが、コルーチンなら1スレッドの上で動き、各コルーチンは1KBのメモリ使用量なので非常に軽い。
- suspend キーワードを関数に付与することによって、中断を表す。
- 中断関数は通常の関数からは呼び出すことができない。
- suspend関数からなら呼び出せる。
などいろいろと基礎的なことを説明頂いたが、とくに自分の中で勉強になったのは、構造化された並行性という部分が非常にわかりやすく勉強になった。スライドの124枚目辺りからですが、1つのCoroutineScopeで並列処理を実行した場合、try catchでcatchしてもクラッシュするというのが↓で、

それがなぜクラッシュするのかという図が↓です。

僕はこの図が一番印象的でした。
改めて学ぶContracts
次は、Contractについてはほとんど知らなかったのですが、何者か気になり、Contractについて聞きに行きました。
スライドはこちら https://speakerdeck.com/tommykw/gai-metexue-hucontracts
Contractsとは?
- コンパイラに一部条件を加えることができる
- ランタイムではなくコンパイル時に適用
- 静的解析できる
- 関数に適用できる
- 1.3で導入されたExperimentalな機能
- 現時点ではEarly Prototypeだが、Stdlibでも多数利用されている
- DSL契約を結ぶことで条件を指定できる
とのこと。
うん、よくわからないので具体的なコードで理解ベースで見てみます。
たとえばKotlin1.2でこのようなコードを実行しようとすると、コンパイルエラーになります。

これはコンパイル時点ではラムダが何回呼び出されるかわからず、再割り当ての可能性があるため、禁止されています。Contractはこのような過度な制約を緩めるためのもの。
Kotlin1.3では run関数は次のように定義されていて、

Contractがあることが分かると思いますが、そこでEXACTLY_ONCEというが1回だけ実行するという契約になっていて、コンパイラはこれをみて判断できるようになるので、Kotlin1.3からは実行できるようになります。

他にもAT_LEAST_ONCEとかあるので詳細はスライドにて説明があります。
Kotlin Multiplatform Project入門
次は、Kotlin MPPの話を聞きに行きました。
スライドはこちら https://speakerdeck.com/aakira/introduction-kotlin-mpp
Kotlin コードを複数のプラットフォームで共有(iOSとAndroidで共有とかフロントとバックエンド)する話。詳細はスライドがわかりやすくて見てもらうと良いと思いますが、この話を聞いてMPPを試したくなりましたね。
また、懇親会で実際のProductionにMPPを導入されいる方の話しを聞いて、MPPはとても気になった話題の1つでした。
Deep Dive into Kotlin DSL
次は Deep Dive into Kotlin DSL を聞きに行きました。
スライドはこちら https://speakerdeck.com/jmatsu/ri-ben-yu-zhu-shi-tuki-deep-dive-into-kotlin-dsl
正直DSLってドメイン固有の言語で、どのドメインがマニアック過ぎた利したら、そこでしかDSLを使えなくなるので個人的にはあまり好きではありませんでした。
しかし、この発表を聞いて、Kotlinで簡単にDSLを作ることができ、読みやすさが向上するとのことだったので、機会があったら作ってみたいと思いました!
あ、英語のセッションでしたが、通訳レシーバーが用意されていて聞き取りやすくてよかったです!

ちなみに、この発表された方と、前日の深夜2時ごろまで飲んでましたw
LT大会
最後はLT大会を聞いてました。
macの充電がなくなってメモは取れなかったのですが、どれも面白かったですね!
皆さん、最後Kotlinかわいいと言って締めてたのが良かったです!(運営に言わされた?)
雰囲気写真
オープニングの様子です コーヒー飲み放題でした 水とかお茶も飲み放題のようでした このお肉美味しかったです!
スライド
こちらにまとめてくださってる方がいらっしゃいますので、そちらを参照ください。