Slide 1

Slide 1 text

Kotlin Updates in LL2019 2019-08-24 @eyasuyuki 1

Slide 2

Slide 2 text

説明すること Kotlin 1.0 から1.3 までの新機能 マルチプラットフォーム対応 コルーチン 契約(Contracts) 2

Slide 3

Slide 3 text

説明しないこと Kotlin の基本的な⽂法 c.f.) 書籍『Kotlin スタートブック』 チュートリアル "Kotlin Koans" 3

Slide 4

Slide 4 text

Kotlin とは (1/3) https://kotlinlang.org/ 4

Slide 5

Slide 5 text

Kotlin とは (2/3) JetBrains が開発したコンパイラ⾔語 JVM バイトコードへのコンパイル JavaScript へのトランスパイル LLVM 中間表現へのコンパイル Null 安全 スマートキャスト データクラス ( ボイラープレートからの解放) ⾼速なコンパイル (Scala に対する優位性) 5

Slide 6

Slide 6 text

Kotlin とは (3/3) 関数型⾔語からの影響 ラムダ式 ⾼階関数 末尾再帰 多値 パターンマッチ 型推論 if などが構⽂ではなく式( 値を返す) 中値記法 6

Slide 7

Slide 7 text

Kotlin の Tutorial Kotlin Koans https://play.kotlinlang.org/koans/overview Koan= 禅の公案 7

Slide 8

Slide 8 text

Kotlin 躍進のきっかけ 2017 年のGoogle I/O でAndroid の開発⾔語として正 式に採⽤された 8

Slide 9

Slide 9 text

Kotlin の歴史 (1/3) バージョン1.0 未満は省略しました。 年⽉ バージョ ン 主なトピック 2016 年2 ⽉ 1.0 Java との完全互換 Java6 バイトコードへのコン パイル 2017 年5 ⽉ Android の開発⾔語として正 式採⽤ 9

Slide 10

Slide 10 text

Kotlin の歴史 (2/3) 年⽉ バージ ョン 主なトピック 2017 年 3 ⽉ 1.1 JavaScript 対応 コルーチン( 実験的) async/await,yield Java9 サポート コンパイル速度の向上 2017 年 11 ⽉ 1.2 マルチプラットフォームプロジ ェクト( 実験的) 10

Slide 11

Slide 11 text

Kotlin の歴史 (3/3) 年⽉ バージョン 主なトピック 2018 年11 ⽉ 1.3 コルーチン Kotlin/Native 契約(Contracts) 11

Slide 12

Slide 12 text

1.0 から 1.3 までの⼤きなトピ ック マルチプラットフォーム対応 コルーチン 契約(Contracts) 12

Slide 13

Slide 13 text

マルチプラットフォーム対応 (1/2) 当初はJava との完全互換が⼤きなメリットだった Java とKotlin が混在しても動作するので部分的に 移⾏することも可能 次いでJavaScript への対応が⾏われ、フロントエン ドもKotlin で開発出来るようになった 13

Slide 14

Slide 14 text

マルチプラットフォーム対応 (2/2) Kotlin/Native のリリースでネイティブコンパイルが 可能になりJava に依存しない道が開かれた 適⽤分野: 当初はAndroid 開発が主な⽤途 現在ではサーバーサイドからフロントエンドまで 全てKotlin で開発できる 14

Slide 15

Slide 15 text

マルチプラットフォームプロ ジェクト ( 実験的 ) 1 つのプロジェクトで複数ターゲットのビルドが可 能 build.gradle などに記述 gradle init でプロジェクトが作れる訳ではない( テ ンプレートがない) 参考⽂献: https://kotlinlang.org/docs/reference/building- mpp-with-gradle.html 15

Slide 16

Slide 16 text

Java 対応 当初のメリット: Java6 でもラムダ式や関数型⾔語的なプログラミ ングができる Java8 以降が広く使われるようになり当初のメリッ トは薄れた Kotlin ⾃体もJava8 以降のバイトコードに対応でき るようになった 16

Slide 17

Slide 17 text

JavaScript 対応 とりあえずKotlin からJavaScript にトランスパイル はできる TypeScript やDart と⽐べて便利かというと... Kotlin/Native でWebAssembly にコンパイルする⽅ が有望...? 参考⽂献: https://speakerdeck.com/subroh0508/jstoge-dou- sinagarakotlinfalseiketeruwen-fa-woxue-bu 17

Slide 18

Slide 18 text

Kotlin/Native(1/2) Kotlin からLLVM 中間表現へコンパイル Linux Windows Android NDK iOS macOS WebAssembly 18

Slide 19

Slide 19 text

Kotlin/Native(2/2) 当然ながらJava のライブラリは使えない Kotlin で記述した標準ライブラリの整備が進んで いる メリット: iOS アプリがKotlin で書ける 参考⽂献: https://www.slideshare.net/TakakiHoshikawa/kotlinnati 19

Slide 20

Slide 20 text

コルーチン (1/2) Kotlin のコルーチンはノンブロッキングで実⾏され る関数 関数の途中で処理を中断したり再開したりできる async Deferred を返すコルーチンビルダー関数 コルーチンビルダー関数の中はノンブロッキング で実⾏される await Deferred のサスペンド関数 サスペンド関数はコルーチンの実⾏を中断する 20

Slide 21

Slide 21 text

コルーチン (2/2) yield , yieldAll サスペンド関数。その時点で中断して値を返す Channel コルーチン間で値を送受信できるキュー (like Golang) 21

Slide 22

Slide 22 text

async(1/2) 実⾏結果: start async end async 22

Slide 23

Slide 23 text

async(2/2) 実⾏結果: start async Inside async end async 23

Slide 24

Slide 24 text

await(1/2) コンパイルエラー: 24

Slide 25

Slide 25 text

await (2/2) 実⾏結果: start runBlocking Hello world. end runBlocking 25

Slide 26

Slide 26 text

async な関数 (1/2) 26

Slide 27

Slide 27 text

async な関数 (2/2) 使い⽅: 実⾏結果 start async function Hello, async. end async function 27

Slide 28

Slide 28 text

契約 (Contracts) スマートキャストの判定を改善するための宣⾔ 関数が呼び出された後の状態を制約してスマートキ ャストが効くようにする 28

Slide 29

Slide 29 text

スマートじゃないキャスト (Java) 29

Slide 30

Slide 30 text

スマートキャスト 30

Slide 31

Slide 31 text

Kotlin 1.3 以降の書き⽅ 契約(Contracts) によって String#isNullOrBlank が false なら null でないことごが保証されるので capitalize() が呼べる 参考⽂献: https://speakerdeck.com/ntaro/kotlin- contracts-number-m3kt 31

Slide 32

Slide 32 text

Kotlin 1.2 以前の書き⽅ name != null を書く必要がある 32

Slide 33

Slide 33 text

契約 (Contracts) のおさらい スマートキャストの判定を改善するための宣⾔ 関数が呼び出された後の状態を制約してスマートキ ャストが効くようにする 参考⽂献: https://speakerdeck.com/ntaro/kotlin- contracts-number-m3kt 33

Slide 34

Slide 34 text

Kotlin の書籍 (1/2) ⻑澤太郎「Kotlin スタートブック」2016 ( 通称⾚べ こ本) ⻑澤太郎「Kotlin Web アプリケーション」2017 34

Slide 35

Slide 35 text

Kotlin の書籍 (2/2) Dmitry Jemerov/Svetlana Isakova "Kotlin in Action" 2017 ( 訳書あり) Pierre-Yves Saumont "Joy of Kotlin" 2019 35

Slide 36

Slide 36 text

このスライドのソースとサン プルコード https://github.com/eyasuyuki/KotlinUpdates 36