- どこでもKotlin #6 〜Kotlin 1.3の新機能に触れる〜に参加してきました。
- 最新のKotlinの話やサーバサイドKotlin、Kotlin/Nativeと幅広い話が聞けて勉強になりました。
- Kotlin/Nativeは気になりつつもあまり情報収集できていなかったので参考になりました。着実に進歩しているものの今はまだ様子見といった印象ですかね。
- 後は太郎さんのContractsの説明めちゃくちゃわかりやすかったです。
タイトル | 発表者 |
---|---|
What's new in Kotlin | LINE 藤原 聖 |
コードで見る Kotlin 1.3 | M3 大和 康平 |
8割完成済みのJavaプロジェクトにKotlinを途中導入した話 | M3 川俣 涼 |
Kotlin/Native 「使ってみた」の一歩先へ | M3 星川 貴樹 |
Kotlin Contracts | Ubie 長澤太郎 |
What's new in Kotlin
- LINE 藤原 聖さん
- エムスリー技術顧問
Kotlin Conf 2018
- JetBrainsが主催
- 今年で2回目
- 1300人以上参加
- 65セッション全て動画公開
Keynote
- Kotlin言語設計者のAndrey
Pragmatic
- 実用主義
- 開発者が考えたことをそのままコードにできる
Evolution
- Keep the language modern
- Comfortable update
- 言語をモダンに保ちつつIDEの補完でサポート
Kotlin 1.3 Release
- 10/29リリース
- Coroutinesがstable
- Kotlin/Nativeがbeta
- Contracts, Inline classes等experimental
最新情報
コードで見る Kotlin 1.3
- M3 大和 康平さん
Kotlin1.3事始め
brew install kotlin
で1.3入る
Croutines
- 軽量なスレッド
- Croutines builder
Inline Classes
標準関数
- Random
- isNullOrEmpty/orEmpty
- Array.copyInto
- ifEmpty/ifBlank
8割完成済みのJavaプロジェクトにKotlinを途中導入した話
- M3 川俣 涼さん
JavaプロジェクトにKotlin導入
- 社内でKotlin導入の流れ
- 新しい技術への挑戦
進め方
- 新規追加のクラス/テストはKotlinで
メリット
- コード量の減少で開発効率アップ
- data class
- Null安全がいい
- nullpo事前に分かるのいい
デメリット
Kotlin/Native 「使ってみた」の一歩先へ
- M3 星川 貴樹
Kotlin/Nativeとは
Kotlin/Nativeの歩み
- 2017/4登場
- Cのヘッダーファイルを解釈することできた
- 2017/11
- 2018/2
- MPP対応
- 2018/4
- Objective-C, Swiftの相互運用改善
- 2018/6
- JVM, JSのstdlibに
- 2018/11beta
- 安定版コルーチンサポート
- Kotlin1.3
Kotlin/Nativeの使いみち
- Java資産使えないのに価値あるの?
- Cのライブラリなら使える
- iOSならSwift, Objective-Cのライブラリ使える
- Kotlin stdlibにない機能はどうするの?
- コルーチン等いろいろ対応されてきてる
- メモリ管理どうするの?
- 想定される使い道
Kotlin/Native速いの?
- JVMの方が2倍速い
- 最適化作業がまだされてないから?
Kotlin/Nativeのこれから
- MPPで使えるライブラリを使うようにする
- KotlinライブラリのMPP化
- iOSエンジニアの理解
Kotlin Contracts
- Ubie 長澤太郎
従来のKotlin
- 便利な関数があるのにスマートキャストできない
!name.isNullOrBlank()
と書くと- Nullableな変数をnullでないと確認した後はNonNullで扱いたい
- 文脈的に明らかにnull出ない場合でもコンパイラがエラーという
name != null
って書かないと行けなかった- これが1.3からちゃんと動くようになる
Contracts
- 事前条件
- 関数の利用者が条件を満たす
- 事後条件
- 関数を呼び出した後の状況を関数が保証する
- ex. List#addしたらlengthが1増える
- 不変条件
- オブジェクトが満たすべき状態を維持する
- Contractsは事後条件の部分
- しかも静的に
対応してる標準関数
- 引数がtrueを保障
- assertTrue
- check
- require
- 引数がfalseを保障
- assertFalse
- 引数がNotNullを保障
- assertNotNull
- checkNotNull
- requireNotNull
従来のKotlin2
- val変数の初期化が絶対成功するはずなのにできない
- ラムダの中での初期化はは一度だけしか呼ばれないのに分かってくれない
- これが1.3からちゃんと動くようになる
- InvocationKind
- AT_MOST_ONCE
- EXACTRY_ONCE
- AT_LEAST_ONCE
- UNKNOWN
契約DSLまとめ
- contract: 関数の先頭
- returns(): 関数が成功したら..
- returns(Any?): true/false/nullを返したら..
- callsInPlace: 関数が呼ばれる回数を保障する
contract { returns(true implies (arg != null) }
contract { callsInPlace)block, InvocationKind.EXACTRY_ONCE) }