SlideShare a Scribd company logo
以 Compose Multiplatform 為例
初探 otlin Multiplatform
范聖佑 (Shengyou Fan)
JetBrains Developer Advocate
Google I/O Extended'22 Party
2022/07/23
Photo by JOSHUA COLEMAN on Unsplash
範例程式碼
—
Android:jetpack-compose-demo
Desktop:compose-for-desktop-demo
2017 2019
Kotlin 發展史
—
2011
JetBrains 公開
Kotlin 語⾔
2016
正式發佈
Kotlin 1.0
Google I/O宣佈
⽀援以 Kotlin
開發 Android
Google I/O宣佈
Android 開發將
以 Kotlin 優先
2020
Kotlin 團隊改
以 Date-driven
發佈新版本
2022
發佈 Kotlin 1.7
⽤⼀個語⾔開發多個平台
—
Kotlin Multiplatform
—
Desktop
Kotlin/JVM
Server
Kotlin/JVM
Android
Kotlin/JVM
iOS
Kotlin/Native
Web
Kotlin/JS
Compose ⽣態系
—
多平台
Jetpack Compose
建立⼿機應⽤程式介⾯
Compose for Web
Compose for Desktop
建立桌⾯應⽤程式介⾯ 建立網路應⽤程式介⾯
⽰範情境
—
早安 ! 今天新加坡樂透的頭獎⾦額⾼達
$8,600,000(約新台幣 1.8 億)耶!快給
我 1 組 6 個 1 到 49 之間的不重複數字,
我要去買個機會,假如明天我沒來上班
的話,你就知道發⽣什麼事了 "
#
實作步驟
—
• 介⾯ (UI) 實作
• 事件 (Event)
• 狀態 (State)
• 業務邏輯 (Business Logic)
• 跨平台
介⾯實作
(抽獎球)
—
@Composable
fun Ball(
!!"
) {
Box(
!!"
) {
Text(
text = !!"
)
}
}
介⾯實作
(抽獎介⾯)
—
@Composable
fun LotteryBoard() {
Column(
!!"
) {
(1!#49).chunked(7).forEach { group !"
Row {
group.forEach {
Ball(it, lotteryNumbers)
}
}
}
}
}
事件
(透過點擊觸發事件)
—
@Composable
fun LotteryBoard() {
!$!!"
Button(onClick = {
}) {
Text(
text = "選號 $"
)
}
}
業務邏輯
(產⽣ 6 組隨機號碼)
—
class LotteryService {
fun generate(amount: Int = 49, take: Int = 6): List<Int> =
(1!#amount).shuffled().take(take)
}
狀態
(事件觸發狀態更新)
—
fun LotteryBoard() {
var lotteryNumbers by remember {
mutableStateOf(listOf<Int>())
}
!$ !!"
Button(onClick = {
lotteryNumbers = !!"
}) {
Text(
text = "選號 $"
)
}
}
快速回顧
—
Kotlin 是⼀個
多平台開發⽣態系 是多平台開發的成功案例
Compose Multiplatform 以樂透抽獎機為例
實作雙平台應⽤程式
• 遵守 Android 開發慣例 (Material、字串、顏⾊…)
• 動畫、進退場、互動效果
• 將專案轉成 Multiplatform 專案 (增加共⽤程式碼)
更進⼀步
—
了解更多
—
Jetpack Compose 官網 Compose Multiplatform 官網
推薦影片
—
Kotlin ⼗週年的故事 Compose Multiplatform
正式發佈
Compose Multiplatform
的故事
Kotlin Collection 全⽅位解析攻略
—
在剛剛 Demo 的過程中,有⽤了哪些
Kotlin 的集合⽅法?
%
collection.kotlin.tips
歡迎參加 Kotlin 社群
—
Line 群 Telegram 群
加入討論群取得最新資訊
tw.kotlin.tips
關注粉絲⾴及頻道
—
Coding 職⼈塾
Kraftsman
范聖佑 (Shengyou Fan)
shengyou.fan@jetbrains.com
Q&A
—
初探 Kotlin Multiplatform

More Related Content

What's hot (20)

PPTX
Selenium Tutorial Java
Ahmed HARRAK
 
PPTX
Flutter
Mohit Sharma
 
PDF
QoS for ROS 2 Dashing/Eloquent
Hideki Takase
 
PDF
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
 
PDF
Introduction to Coroutines @ KotlinConf 2017
Roman Elizarov
 
PDF
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
Shengyou Fan
 
PDF
Nervesが開拓する「ElixirでIoT」の新世界
Hideki Takase
 
PDF
Introduction to kotlin coroutines
NAVER Engineering
 
PPS
JUnit Presentation
priya_trivedi
 
PDF
Android Jetpack
Tudor Sirbu
 
PDF
Retrofit library for android
InnovationM
 
PDF
[Android] Maps, Geocoding and Location-Based Services
Nikmesoft Ltd
 
PDF
ドメイン駆動設計 思えば遠くにきたもんだ
増田 亨
 
PDF
Coroutines for Kotlin Multiplatform in Practise
Christian Melchior
 
PPTX
Containers and workload security an overview
Krishna-Kumar
 
PPTX
HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU
Lucas Jellema
 
PDF
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
 
PDF
毎日が越境だ!
増田 亨
 
PDF
高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く
Hideki Takase
 
PPTX
A flight with Flutter
Ahmed Tarek
 
Selenium Tutorial Java
Ahmed HARRAK
 
Flutter
Mohit Sharma
 
QoS for ROS 2 Dashing/Eloquent
Hideki Takase
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
 
Introduction to Coroutines @ KotlinConf 2017
Roman Elizarov
 
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
Shengyou Fan
 
Nervesが開拓する「ElixirでIoT」の新世界
Hideki Takase
 
Introduction to kotlin coroutines
NAVER Engineering
 
JUnit Presentation
priya_trivedi
 
Android Jetpack
Tudor Sirbu
 
Retrofit library for android
InnovationM
 
[Android] Maps, Geocoding and Location-Based Services
Nikmesoft Ltd
 
ドメイン駆動設計 思えば遠くにきたもんだ
増田 亨
 
Coroutines for Kotlin Multiplatform in Practise
Christian Melchior
 
Containers and workload security an overview
Krishna-Kumar
 
HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU
Lucas Jellema
 
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
 
毎日が越境だ!
増田 亨
 
高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く
Hideki Takase
 
A flight with Flutter
Ahmed Tarek
 

More from Shengyou Fan (20)

PDF
[JCConf 2024] Kotlin/Wasm:為 Kotlin 多平台帶來更多可能性
Shengyou Fan
 
PDF
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
Shengyou Fan
 
PDF
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
Shengyou Fan
 
PDF
How I make a podcast website using serverless technology in 2023
Shengyou Fan
 
PDF
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
Shengyou Fan
 
PDF
Using the Exposed SQL Framework to Manage Your Database
Shengyou Fan
 
PDF
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
Shengyou Fan
 
PDF
[COSCUP 2022] Kotlin Collection 遊樂園
Shengyou Fan
 
PDF
[PHP 也有 Day #64] PHP 升級指南
Shengyou Fan
 
PDF
Composer 經典食譜
Shengyou Fan
 
PDF
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
Shengyou Fan
 
PDF
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
Shengyou Fan
 
PDF
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
Shengyou Fan
 
PDF
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
Shengyou Fan
 
PDF
用 Kotlin 打造讀書會小幫手
Shengyou Fan
 
PDF
Kotlin 讀書會第三梯次第一章
Shengyou Fan
 
PDF
用 OPENRNDR 將 Chatbot 訊息視覺化
Shengyou Fan
 
PDF
[JCConf 2020] 用 Kotlin 跨入 Serverless 世代
Shengyou Fan
 
PDF
[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史
Shengyou Fan
 
PDF
Ktor 部署攻略 - 老派 Fat Jar 大法
Shengyou Fan
 
[JCConf 2024] Kotlin/Wasm:為 Kotlin 多平台帶來更多可能性
Shengyou Fan
 
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
Shengyou Fan
 
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
Shengyou Fan
 
How I make a podcast website using serverless technology in 2023
Shengyou Fan
 
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
Shengyou Fan
 
Using the Exposed SQL Framework to Manage Your Database
Shengyou Fan
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
Shengyou Fan
 
[COSCUP 2022] Kotlin Collection 遊樂園
Shengyou Fan
 
[PHP 也有 Day #64] PHP 升級指南
Shengyou Fan
 
Composer 經典食譜
Shengyou Fan
 
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
Shengyou Fan
 
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
Shengyou Fan
 
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
Shengyou Fan
 
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
Shengyou Fan
 
用 Kotlin 打造讀書會小幫手
Shengyou Fan
 
Kotlin 讀書會第三梯次第一章
Shengyou Fan
 
用 OPENRNDR 將 Chatbot 訊息視覺化
Shengyou Fan
 
[JCConf 2020] 用 Kotlin 跨入 Serverless 世代
Shengyou Fan
 
[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史
Shengyou Fan
 
Ktor 部署攻略 - 老派 Fat Jar 大法
Shengyou Fan
 
Ad

初探 Kotlin Multiplatform