kumamotone’s blog

iOS/Android アプリエンジニアです https://twitter.com/kumamo_tone

Kotlin Fest 2019 に参加しました #kotlinfest

f:id:kumamotone:20190824215157j:plain

開催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)

speakerdeck.com

型に関するあれやこれや。

たとえば以下のような話があった。

  • スマートキャスト
  • 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)

speakerdeck.com

現時点での構文は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の概要から、やり方について詳細に説明という盛り沢山な内容。

speakerdeck.com

TIPS

Kotlin MPP は「UI部分は提供せず、ロジックのみ提供する」ので、Viewも共通化しようとするReactive Native、Flutter、Xamarin(Forms)とは方針が異なる。

MPPとは ・Kotlin/JVM ・Kotlin/Native ・Kotlin/JS の総称

・Kotlin/Native はLLVM Toolchainを使用して各プラットフォームのバイナリを作成 ・VM環境が不要 ・Linuxx86_64, arm32, arm64, MIPS, MIPS LE, Raspberri PI)も対応

なのでもちろん Kotlin/Native ≠ iOS

サンプルリポジトリがすごい

github.com

フルKotlinで書かれた、今すぐ使える Kotlin Multiplatform なライブラリたち

github.com

16:45-17:30 もっと Kotlin × Spring 木原 快 / 17:45-18:30 公募によるLT大会

www.slideshare.net

聞いてたけどまとめる体力が切れました すみません たぶん後日書きます

企業ブース・懇親会など

運営のホスピタリティが高すぎる

ランチないけど全くこまらなかった

これは懇親会

その他

CAさんのブースで寿司打やったら運良く1位になって良さそうな品をもらった。ありがとうございます

Tシャツが住友さんとかぶった

以上です!