Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin Updates in LL2019

Kotlin Updates in LL2019

ENDO Yasuyuki

August 24, 2019
Tweet

More Decks by ENDO Yasuyuki

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  7. Kotlin

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  10. Kotlin
    の歴史
    (2/3)
    年⽉ バージ
    ョン 主なトピック
    2017

    3
    ⽉ 1.1
    JavaScript
    対応
    コルーチン(
    実験的)
    async/await,yield
    Java9
    サポート
    コンパイル速度の向上
    2017

    11
    ⽉ 1.2
    マルチプラットフォームプロジ
    ェクト(
    実験的)
    10

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. マルチプラットフォームプロ
    ジェクト
    (
    実験的
    )
    1
    つのプロジェクトで複数ターゲットのビルドが可

    build.gradle
    などに記述
    gradle init
    でプロジェクトが作れる訳ではない(

    ンプレートがない)
    参考⽂献:
    https://kotlinlang.org/docs/reference/building-
    mpp-with-gradle.html
    15

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  26. async
    な関数
    (1/2)
    26

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  30. スマートキャスト
    30

    View full-size slide

  31. Kotlin 1.3
    以降の書き⽅
    契約(Contracts)
    によって
    String#isNullOrBlank

    false
    なら
    null
    でないことごが保証されるので
    capitalize()
    が呼べる
    参考⽂献: https://speakerdeck.com/ntaro/kotlin-
    contracts-number-m3kt
    31

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide