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
560
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
500
Bluespoilerのご紹介
eyasuyuki
0
440
幻のテスト技法「キーワード駆動テスト」を追い求めて
eyasuyuki
0
2.6k
キーワード駆動っぽいテストができるツールを開発した話
eyasuyuki
0
470
Learn Languages 2019
eyasuyuki
5
1.1k
Why Flutter excitement me?
eyasuyuki
3
1.1k
Kotlin vs Swift
eyasuyuki
0
510
フロントエンドだめ自慢
eyasuyuki
0
130
llot_frontend.pdf
eyasuyuki
0
56
Other Decks in Programming
See All in Programming
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
390
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
860
AIと私たちの学習の変化を考える - Claude Codeの学習モードを例に
azukiazusa1
10
4.2k
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
520
時間軸から考えるTerraformを使う理由と留意点
fufuhu
16
4.8k
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
860
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
530
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
270
Design Foundational Data Engineering Observability
sucitw
3
200
Amazon RDS 向けに提供されている MCP Server と仕組みを調べてみた/jawsug-okayama-2025-aurora-mcp
takahashiikki
1
110
Android 16 × Jetpack Composeで縦書きテキストエディタを作ろう / Vertical Text Editor with Compose on Android 16
cc4966
2
230
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
173
14k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Music & Morning Musume
bryan
46
6.8k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
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