開催2度目の KotinFest に行ってきました。めっちゃ良かった。
セッションのメモを取ったので共有です。
セッション
11:00-11:10オープニング・セッション / 長澤太郎
テーマは Kotlin を愛でよう!
3トラック 15セッション 7LT 来場者380人+ 協賛企業18社 運営スタッフ35人。
セッション終了後、ホワイエのAsk The Speaker ブースで質問可能。
11:10-12:00 What's new in Kotlin Svetlana Isakova
スピーカー は Jetbrains の人で Kotlin in アクションの著者でもあるSvetlana Isakovaさん。
Principles of Pragmatic Evolutionというのがある。
- keeping the language modern
- comfortable updates
- feedback loop
KEEP は Kotlin Evolution and Enhancement Process の略。
新しい機能は皆納されている。 freeCompilerArgs +=で追加して、実験的な機能を有効にできる。
最近のKotlinの機能の紹介。以下のような新機能が紹介されていた。
- inline classes
- Contract
- Flow
- Kotlin Multiplatform
深堀りしたければ午後からのセッションで拾うことができるという、基調講演らしい内容だった。
13:30-14:15 Kotlinの型実践入門 / 佐藤 隼(ホールC)
型に関するあれやこれや。
たとえば以下のような話があった。
- スマートキャスト
- Any, Nothing
- 共変、反変、不変について
- sealed class について
かなり広範囲ながらコンパクトにまとまっていた。
TIPS
- KotlinのスマートキャストはFlow-sensitive typing (flow typing) とよばれる
- mutableだとあぶないのでスマートキャストできません 束縛する必要がある
- contract { returns false / false のときは / implies this@isNullOrEmpty != null / null じゃないことを保証する / }
- Anyはwait、notifyメソッドがないが、(s as Object).notify() とかすれば呼べる
- NothingはすべてのKotlinクラスのサブクラス キャストがいらなくなるところがありうれしい
14:30-15:15 改めて学ぶContracts / 富田健二(ホールC)
現時点での構文はEarly Prototype、しかし標準ライブラリでも多数利用されている Contracts についての丁寧な説明だった。ほどよい分量でわかりやすい。
TIPS
- スコープ関数で使われている
- 1.3.0では18メソッド、1.3.50では26メソッドで対応
- 入力と出力を記述する句の集合 = 契約
Java にある、 @ Contract アノテーションというのがある @ Contract はorg.jetbrains:annotations @ Contract で、メソッドが満たす必要がある契約を定義するために使用される。注釈をつけるとIDEが契約を満たしているかチェックしてくれる
- @ Contract("_, _ -> fail") は任意の引数が2つあり、例外を返す契約を定義
- @ Contract("null -> fail; !null -> !null") は引数がnullの場合→例外を投げる 引数がnullでない→null以外を返す
@ Contract を Kotlinで使うようにするという案もあったとKEEPに書いてあるが、IDEの字句解析、構文解析、強調表示などいろいろやることがあるので 本質的にインジェクションであるため事態をさらに複雑にするので見送られた
関数がContractを持つ。ContractはEffectの集まり。という構造になっているEffectには
・CallsInPlace(callsInPlace) ・ConditionalEffect(implies) ・SimpleEffect(returns) ・ReturnsNotNull(returnsNotNull)
がある。
InvocationKindの種類としては、
・EXACTLY_ONCE ・blockの処理を1回だけ実行するという契約 ・AT_LEAST_ONCE ・処理を1回以上実行するという契約 ・AT_MOST_ONCE ・処理を高々1回だけ実行するという契約(成功したときだけとか) ・Resultとかで使われている ・UNKNOWN ・デフォルト
がある。
Contractの制約として、
・関数の最初に書かないといけない ・トップレベルの関数にしか使えない ・関数ブロック内でのみ有効 ・getter/setterにもセットできない ・空のContractは定義できない ・if/whenやtryは式だけどcontractの中身に書くことはできない
がある。
15:30-16:15 Kotlin Multiplatform Project入門 荒谷光(ホールA)
人類の夢Kotlin MPPに関する発表。MPPの概要から、やり方について詳細に説明という盛り沢山な内容。
TIPS
Kotlin MPP は「UI部分は提供せず、ロジックのみ提供する」ので、Viewも共通化しようとするReactive Native、Flutter、Xamarin(Forms)とは方針が異なる。
MPPとは ・Kotlin/JVM ・Kotlin/Native ・Kotlin/JS の総称
・Kotlin/Native はLLVM Toolchainを使用して各プラットフォームのバイナリを作成 ・VM環境が不要 ・Linux(x86_64, arm32, arm64, MIPS, MIPS LE, Raspberri PI)も対応
なのでもちろん Kotlin/Native ≠ iOS
サンプルリポジトリがすごい
フルKotlinで書かれた、今すぐ使える Kotlin Multiplatform なライブラリたち
16:45-17:30 もっと Kotlin × Spring 木原 快 / 17:45-18:30 公募によるLT大会
www.slideshare.net
聞いてたけどまとめる体力が切れました すみません たぶん後日書きます
企業ブース・懇親会など
運営の手腕にひたすら感動してる #kotlinfest pic.twitter.com/hwgW1Qqyak
— Monkuma 👾 (@kumamo_tone) August 24, 2019
💯😍 #kotlinfest pic.twitter.com/ehlzFwAbUq
— Monkuma 👾 (@kumamo_tone) August 24, 2019
運営のホスピタリティが高すぎる
これビュッフェ500円はありがたい #kotlinfest pic.twitter.com/fRJghAJbw4
— Monkuma 👾 (@kumamo_tone) August 24, 2019
ランチないけど全くこまらなかった
おいしそう #kotlinfest pic.twitter.com/OQbW0VlDtM
— Monkuma 👾 (@kumamo_tone) August 24, 2019
これは懇親会
その他
🎉結果発表🎉
— CyberAgentDevelopers (@ca_developers) August 24, 2019
寿司打🍣にご参加頂いた皆さまありがとうございました!
🥇1位🥇@kumamo_tone
🥈2位🥈@nono_develop
🥉3位🥉 @SgniYauku
こちらの3名にはAbema大吟醸を差し上げます!17時までにCAブースへお越しください。既に会場を出られている方は、DMにてご連絡下さい。#kotlinfest pic.twitter.com/UHADDn6gkN
CyberAgent @ca_developers さんに大吟醸いただきました 地元山口県のお酒だ #kotlinfest pic.twitter.com/NDYRbATP7l
— Monkuma 👾 (@kumamo_tone) August 24, 2019
CAさんのブースで寿司打やったら運良く1位になって良さそうな品をもらった。ありがとうございます
たまたまシャツがかぶった人たち #kotlinfest pic.twitter.com/HG7vn6C1XV
— くぼぼ (@swiz_ard) August 24, 2019
Tシャツが住友さんとかぶった
以上です!