Kotlin Updates in LL2019
by
ENDO Yasuyuki
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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