SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
以 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

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園
 
Try Jetpack Compose
Try Jetpack ComposeTry Jetpack Compose
Try Jetpack Compose
 
MVC MVVM MVVMC
MVC MVVM MVVMCMVC MVVM MVVMC
MVC MVVM MVVMC
 
[JCConf 2020] 用 Kotlin 跨入 Serverless 世代
[JCConf 2020] 用 Kotlin 跨入 Serverless 世代[JCConf 2020] 用 Kotlin 跨入 Serverless 世代
[JCConf 2020] 用 Kotlin 跨入 Serverless 世代
 
Android jetpack compose | Declarative UI
Android jetpack compose | Declarative UI Android jetpack compose | Declarative UI
Android jetpack compose | Declarative UI
 
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことMultibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
 
Kubernetes Controller for Pull Request Based Environment
Kubernetes Controller for Pull Request Based EnvironmentKubernetes Controller for Pull Request Based Environment
Kubernetes Controller for Pull Request Based Environment
 
すごいBOSHたのしく学ぼう
すごいBOSHたのしく学ぼうすごいBOSHたのしく学ぼう
すごいBOSHたのしく学ぼう
 
Why I ❤️ Kotlin Multiplatform (and want YOU to also ❤️ Kotlin Multiplatform)
Why I ❤️ Kotlin Multiplatform (and want YOU to also ❤️ Kotlin Multiplatform)Why I ❤️ Kotlin Multiplatform (and want YOU to also ❤️ Kotlin Multiplatform)
Why I ❤️ Kotlin Multiplatform (and want YOU to also ❤️ Kotlin Multiplatform)
 
Jetpack Compose.pptx
Jetpack Compose.pptxJetpack Compose.pptx
Jetpack Compose.pptx
 
Kotlin Multiplatform
Kotlin MultiplatformKotlin Multiplatform
Kotlin Multiplatform
 
シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図
 
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
 
From Spring Framework 5.3 to 6.0
From Spring Framework 5.3 to 6.0From Spring Framework 5.3 to 6.0
From Spring Framework 5.3 to 6.0
 
用 Kotlin 做自動化工具
用 Kotlin 做自動化工具用 Kotlin 做自動化工具
用 Kotlin 做自動化工具
 
Jetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UIJetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UI
 
Hardware Accelerated 2D Rendering for Android
Hardware Accelerated 2D Rendering for AndroidHardware Accelerated 2D Rendering for Android
Hardware Accelerated 2D Rendering for Android
 
Spring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovSpring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny Borisov
 
用 Standalone Component 來寫 Angular 吧! - STUDY4.TW 2023 小聚 - 聊前端
用 Standalone Component 來寫 Angular 吧! - STUDY4.TW 2023 小聚 - 聊前端 用 Standalone Component 來寫 Angular 吧! - STUDY4.TW 2023 小聚 - 聊前端
用 Standalone Component 來寫 Angular 吧! - STUDY4.TW 2023 小聚 - 聊前端
 
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang) [Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
 

Ähnlich wie 初探 Kotlin Multiplatform

Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture
lusecheng
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型
Tom Fan
 
Firefox OS Overview
Firefox OS OverviewFirefox OS Overview
Firefox OS Overview
Yan-ren Tsai
 
《氪周刊:互联网创业必读》(79期)
《氪周刊:互联网创业必读》(79期)《氪周刊:互联网创业必读》(79期)
《氪周刊:互联网创业必读》(79期)
36Kr.com
 
Html5研究小组《微周刊》第14期
Html5研究小组《微周刊》第14期Html5研究小组《微周刊》第14期
Html5研究小组《微周刊》第14期
PL dream
 
第一次 Mobile App 就上手
第一次 Mobile App 就上手第一次 Mobile App 就上手
第一次 Mobile App 就上手
Ying-Hsiang Liao
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Gelis Wu
 
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
Shanda innovation institute
 
04.layman android google handheld device application design
04.layman android   google handheld device application design04.layman android   google handheld device application design
04.layman android google handheld device application design
gaquay086
 
行動商務 - PhoneGapBuild and Upto Market
行動商務 - PhoneGapBuild and Upto Market行動商務 - PhoneGapBuild and Upto Market
行動商務 - PhoneGapBuild and Upto Market
My own sweet home!
 
《氪周刊:互联网创业必读》(第72期)
《氪周刊:互联网创业必读》(第72期)《氪周刊:互联网创业必读》(第72期)
《氪周刊:互联网创业必读》(第72期)
Chada Chiu
 

Ähnlich wie 初探 Kotlin Multiplatform (20)

用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享
用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享
用 Kotlin Multiplatform 創建跨平台的 Android DeepLink 測試工具:Compose Desktop 實踐分享
 
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
 
Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
Firefox OS Overview
Firefox OS OverviewFirefox OS Overview
Firefox OS Overview
 
《氪周刊:互联网创业必读》(79期)
《氪周刊:互联网创业必读》(79期)《氪周刊:互联网创业必读》(79期)
《氪周刊:互联网创业必读》(79期)
 
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
 
Html5研究小组《微周刊》第14期
Html5研究小组《微周刊》第14期Html5研究小组《微周刊》第14期
Html5研究小组《微周刊》第14期
 
第一次 Mobile App 就上手
第一次 Mobile App 就上手第一次 Mobile App 就上手
第一次 Mobile App 就上手
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第三天
 
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
04.layman android google handheld device application design
04.layman android   google handheld device application design04.layman android   google handheld device application design
04.layman android google handheld device application design
 
行動商務 - PhoneGapBuild and Upto Market
行動商務 - PhoneGapBuild and Upto Market行動商務 - PhoneGapBuild and Upto Market
行動商務 - PhoneGapBuild and Upto Market
 
《氪周刊:互联网创业必读》(第72期)
《氪周刊:互联网创业必读》(第72期)《氪周刊:互联网创业必读》(第72期)
《氪周刊:互联网创业必读》(第72期)
 
來玩 Bot Framework Composer 2.0版吧!
來玩 Bot Framework Composer 2.0版吧!來玩 Bot Framework Composer 2.0版吧!
來玩 Bot Framework Composer 2.0版吧!
 
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 

Mehr von Shengyou Fan

Mehr von Shengyou Fan (18)

[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
 
How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023
 
Using the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseUsing the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your Database
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
 
Composer 經典食譜
Composer 經典食譜Composer 經典食譜
Composer 經典食譜
 
老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具
 
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
 
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
 
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
 
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
 
用 Kotlin 打造讀書會小幫手
用 Kotlin 打造讀書會小幫手用 Kotlin 打造讀書會小幫手
用 Kotlin 打造讀書會小幫手
 
Kotlin 讀書會第三梯次第一章
Kotlin 讀書會第三梯次第一章Kotlin 讀書會第三梯次第一章
Kotlin 讀書會第三梯次第一章
 
用 OPENRNDR 將 Chatbot 訊息視覺化
用 OPENRNDR 將 Chatbot 訊息視覺化用 OPENRNDR 將 Chatbot 訊息視覺化
用 OPENRNDR 將 Chatbot 訊息視覺化
 
[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史
[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史
[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史
 
Ktor 部署攻略 - 老派 Fat Jar 大法
Ktor 部署攻略 - 老派 Fat Jar 大法Ktor 部署攻略 - 老派 Fat Jar 大法
Ktor 部署攻略 - 老派 Fat Jar 大法
 
以 Kotlin 快速打造 Mobile Backend
以 Kotlin 快速打造 Mobile Backend以 Kotlin 快速打造 Mobile Backend
以 Kotlin 快速打造 Mobile Backend
 
Kotlin 一條龍 - 打造全平台應用
Kotlin 一條龍 - 打造全平台應用Kotlin 一條龍 - 打造全平台應用
Kotlin 一條龍 - 打造全平台應用
 
[HKOSCon 2020] Build an api service using ktor rapidly
[HKOSCon 2020] Build an api service using ktor rapidly[HKOSCon 2020] Build an api service using ktor rapidly
[HKOSCon 2020] Build an api service using ktor rapidly
 

初探 Kotlin Multiplatform