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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ENDO Yasuyuki
August 24, 2019
Programming
610
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin Updates in LL2019
ENDO Yasuyuki
August 24, 2019
More Decks by ENDO Yasuyuki
See All by ENDO Yasuyuki
Blueskyに伏せ字投稿ができるWebアプリの作り方
eyasuyuki
0
590
Bluespoilerのご紹介
eyasuyuki
0
480
幻のテスト技法「キーワード駆動テスト」を追い求めて
eyasuyuki
0
2.7k
キーワード駆動っぽいテストができるツールを開発した話
eyasuyuki
0
520
Learn Languages 2019
eyasuyuki
5
1.1k
Why Flutter excitement me?
eyasuyuki
3
1.2k
Kotlin vs Swift
eyasuyuki
0
530
フロントエンドだめ自慢
eyasuyuki
0
140
llot_frontend.pdf
eyasuyuki
0
70
Other Decks in Programming
See All in Programming
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
380
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
180
AIエージェントの隔離技術の徹底比較
kawayu
0
470
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
130
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.9k
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
190
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
250
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
18
6.3k
New "Type" system on PicoRuby
pocke
1
740
AI時代の仕事技芸論 — ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ
kuranuki
1
640
Featured
See All Featured
Practical Orchestrator
shlominoach
191
11k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Google's AI Overviews - The New Search
badams
0
1k
WCS-LA-2024
lcolladotor
0
620
Paper Plane (Part 1)
katiecoart
PRO
0
8.8k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
140
Designing Experiences People Love
moore
143
24k
Into the Great Unknown - MozCon
thekraken
41
2.6k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
720
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