Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlin Updates in LL2019
Search
ENDO Yasuyuki
August 24, 2019
Programming
0
500
Kotlin Updates in LL2019
ENDO Yasuyuki
August 24, 2019
Tweet
Share
More Decks by ENDO Yasuyuki
See All by ENDO Yasuyuki
Blueskyに伏せ字投稿ができるWebアプリの作り方
eyasuyuki
0
310
Bluespoilerのご紹介
eyasuyuki
0
320
幻のテスト技法「キーワード駆動テスト」を追い求めて
eyasuyuki
0
2.4k
キーワード駆動っぽいテストができるツールを開発した話
eyasuyuki
0
410
Learn Languages 2019
eyasuyuki
5
1k
Why Flutter excitement me?
eyasuyuki
3
970
Kotlin vs Swift
eyasuyuki
0
490
フロントエンドだめ自慢
eyasuyuki
0
100
llot_frontend.pdf
eyasuyuki
0
51
Other Decks in Programming
See All in Programming
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
350
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
360
create_tableをしただけなのに〜囚われのuuid編〜
daisukeshinoku
0
290
Recoilを剥がしている話
kirik
5
7.2k
Cloudflare MCP ServerでClaude Desktop からWeb APIを構築
kutakutat
1
570
ブラウザ単体でmp4書き出すまで - muddy-web - 2024-12
yue4u
3
490
採用事例の少ないSvelteを選んだ理由と それを正解にするためにやっていること
oekazuma
2
1.1k
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
300
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
240
Go の GC の不得意な部分を克服したい
taiyow
3
840
MCP with Cloudflare Workers
yusukebe
2
230
CloudflareStack でRAGに入門
asahiiwm
0
100
Featured
See All Featured
Building an army of robots
kneath
302
44k
It's Worth the Effort
3n
183
28k
Rails Girls Zürich Keynote
gr2m
94
13k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Building Your Own Lightsaber
phodgson
103
6.1k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Building Adaptive Systems
keathley
38
2.3k
Bash Introduction
62gerente
609
210k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
What's in a price? How to price your products and services
michaelherold
244
12k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Transcript
Kotlin Updates in LL2019 2019-08-24 @eyasuyuki 1
説明すること Kotlin 1.0 から1.3 までの新機能 マルチプラットフォーム対応 コルーチン 契約(Contracts) 2
説明しないこと Kotlin の基本的な⽂法 c.f.) 書籍『Kotlin スタートブック』 チュートリアル "Kotlin Koans" 3
Kotlin とは (1/3) https://kotlinlang.org/ 4
Kotlin とは (2/3) JetBrains が開発したコンパイラ⾔語 JVM バイトコードへのコンパイル JavaScript へのトランスパイル LLVM
中間表現へのコンパイル Null 安全 スマートキャスト データクラス ( ボイラープレートからの解放) ⾼速なコンパイル (Scala に対する優位性) 5
Kotlin とは (3/3) 関数型⾔語からの影響 ラムダ式 ⾼階関数 末尾再帰 多値 パターンマッチ 型推論
if などが構⽂ではなく式( 値を返す) 中値記法 6
Kotlin の Tutorial Kotlin Koans https://play.kotlinlang.org/koans/overview Koan= 禅の公案 7
Kotlin 躍進のきっかけ 2017 年のGoogle I/O でAndroid の開発⾔語として正 式に採⽤された 8
Kotlin の歴史 (1/3) バージョン1.0 未満は省略しました。 年⽉ バージョ ン 主なトピック 2016
年2 ⽉ 1.0 Java との完全互換 Java6 バイトコードへのコン パイル 2017 年5 ⽉ Android の開発⾔語として正 式採⽤ 9
Kotlin の歴史 (2/3) 年⽉ バージ ョン 主なトピック 2017 年 3
⽉ 1.1 JavaScript 対応 コルーチン( 実験的) async/await,yield Java9 サポート コンパイル速度の向上 2017 年 11 ⽉ 1.2 マルチプラットフォームプロジ ェクト( 実験的) 10
Kotlin の歴史 (3/3) 年⽉ バージョン 主なトピック 2018 年11 ⽉ 1.3
コルーチン Kotlin/Native 契約(Contracts) 11
1.0 から 1.3 までの⼤きなトピ ック マルチプラットフォーム対応 コルーチン 契約(Contracts) 12
マルチプラットフォーム対応 (1/2) 当初はJava との完全互換が⼤きなメリットだった Java とKotlin が混在しても動作するので部分的に 移⾏することも可能 次いでJavaScript への対応が⾏われ、フロントエン
ドもKotlin で開発出来るようになった 13
マルチプラットフォーム対応 (2/2) Kotlin/Native のリリースでネイティブコンパイルが 可能になりJava に依存しない道が開かれた 適⽤分野: 当初はAndroid 開発が主な⽤途 現在ではサーバーサイドからフロントエンドまで
全てKotlin で開発できる 14
マルチプラットフォームプロ ジェクト ( 実験的 ) 1 つのプロジェクトで複数ターゲットのビルドが可 能 build.gradle などに記述
gradle init でプロジェクトが作れる訳ではない( テ ンプレートがない) 参考⽂献: https://kotlinlang.org/docs/reference/building- mpp-with-gradle.html 15
Java 対応 当初のメリット: Java6 でもラムダ式や関数型⾔語的なプログラミ ングができる Java8 以降が広く使われるようになり当初のメリッ トは薄れた Kotlin
⾃体もJava8 以降のバイトコードに対応でき るようになった 16
JavaScript 対応 とりあえずKotlin からJavaScript にトランスパイル はできる TypeScript やDart と⽐べて便利かというと... Kotlin/Native
でWebAssembly にコンパイルする⽅ が有望...? 参考⽂献: https://speakerdeck.com/subroh0508/jstoge-dou- sinagarakotlinfalseiketeruwen-fa-woxue-bu 17
Kotlin/Native(1/2) Kotlin からLLVM 中間表現へコンパイル Linux Windows Android NDK iOS macOS
WebAssembly 18
Kotlin/Native(2/2) 当然ながらJava のライブラリは使えない Kotlin で記述した標準ライブラリの整備が進んで いる メリット: iOS アプリがKotlin で書ける
参考⽂献: https://www.slideshare.net/TakakiHoshikawa/kotlinnati 19
コルーチン (1/2) Kotlin のコルーチンはノンブロッキングで実⾏され る関数 関数の途中で処理を中断したり再開したりできる async Deferred<T> を返すコルーチンビルダー関数 コルーチンビルダー関数の中はノンブロッキング
で実⾏される await Deferred<T> のサスペンド関数 サスペンド関数はコルーチンの実⾏を中断する 20
コルーチン (2/2) yield , yieldAll サスペンド関数。その時点で中断して値を返す Channel コルーチン間で値を送受信できるキュー (like Golang)
21
async(1/2) 実⾏結果: start async end async 22
async(2/2) 実⾏結果: start async Inside async end async 23
await(1/2) コンパイルエラー: 24
await (2/2) 実⾏結果: start runBlocking Hello world. end runBlocking 25
async な関数 (1/2) 26
async な関数 (2/2) 使い⽅: 実⾏結果 start async function Hello, async.
end async function 27
契約 (Contracts) スマートキャストの判定を改善するための宣⾔ 関数が呼び出された後の状態を制約してスマートキ ャストが効くようにする 28
スマートじゃないキャスト (Java) 29
スマートキャスト 30
Kotlin 1.3 以降の書き⽅ 契約(Contracts) によって String#isNullOrBlank が false なら null
でないことごが保証されるので capitalize() が呼べる 参考⽂献: https://speakerdeck.com/ntaro/kotlin- contracts-number-m3kt 31
Kotlin 1.2 以前の書き⽅ name != null を書く必要がある 32
契約 (Contracts) のおさらい スマートキャストの判定を改善するための宣⾔ 関数が呼び出された後の状態を制約してスマートキ ャストが効くようにする 参考⽂献: https://speakerdeck.com/ntaro/kotlin- contracts-number-m3kt 33
Kotlin の書籍 (1/2) ⻑澤太郎「Kotlin スタートブック」2016 ( 通称⾚べ こ本) ⻑澤太郎「Kotlin Web
アプリケーション」2017 34
Kotlin の書籍 (2/2) Dmitry Jemerov/Svetlana Isakova "Kotlin in Action" 2017
( 訳書あり) Pierre-Yves Saumont "Joy of Kotlin" 2019 35
このスライドのソースとサン プルコード https://github.com/eyasuyuki/KotlinUpdates 36