前言
記不清什麼時候翻 Android 官方文件的時候,發現提供的示例程式碼已經變成了 Kotlin...
逛全球最大同性交友網站( GitHub )也發現越來越多的開源庫都是基於 Kotlin 語言...
關於 Kotlin 的相關書籍和資料也開始豐富起來了...
Kotlin,一個神奇的網站...呸...是一個面向 JVM 的靜態開發語言,16年推出 1.0 Release 版本,17年被 Google 宣佈為 Android 官方開發語言,以及即將到來的 18 年全球開發者大會...
以上這些種種跡象讓我從之前的觀望態度,開始對 Kotlin 再一次充滿了好奇以及躍躍欲試 。
於是,最近在時間允許的情況下,嘗試著把專案中某個模組通過 Kotlin 去重寫,結果和吃了炫邁一樣,發現根本停不下來,直接把整個工程的 Java 程式碼全部重寫成了 Kotlin,最後連 Gradle 的構建指令碼語言也被切換到了 Kotlin DSL 上。
嗯,Kotlin 果然有毒...
關於專案
因為這個專案的業務功能不是很複雜,本次實踐就直接把專案中的 Java 程式碼全部用 Kotlin 重寫了一遍,我們看下主要包含的功能模組:
- 登入功能
- 訊息中心
- 統一容器(H5、Weex 容器)
- 社交分享功能
- 掃碼功能
可以看到該 App 偏向於端容器,主要業務都是使用的 H5 和 Weex 頁面所寫,而Natvie 上的業務不是很複雜。
需要說明的一點是,本次重寫不是直接通過工具對原有 Java 類檔案進行轉換到 Kotlin,雖然 Kotlin 外掛提供了這樣的功能,但是不推薦大家去這樣操作,因為實際轉換的過程當中,它並不能很好發揮 Kotlin 真正的強大之處,比如轉換之後, 你可能會看到大量的 ?
和 !!
符號, 這是由於 Kotlin 空安全的特性引起,還有一個就是你在重寫的時候,也相當於去重構了一遍你之前的程式碼或者別人的程式碼,可以很好的幫助你去理解和優化之前的程式碼邏輯,也會刪除了很多無用類和程式碼,親測非常有用,而且投入的時間也不多。
實踐總結
關於如何在原有的 Android 專案中使用 Kotlin,官方已經提供很詳細的指導文件,簡單說下,分為兩步:
- 升級 Android Studio 到 3.0 版本以上
- 新增 Kotlin Plugin 外掛和 Kotlin 依賴庫
重寫前後對比
-
關於包大小,因為需要引入 Kotlin 的依賴庫,所以增加大概 60 KB 的大小,按照現在 Apk 的體量,幾乎可以忽略不計。
-
程式碼量減少 30%
其他的好處
-
程式碼簡潔
//一行程式碼搞定 POJO 類,同時具有 `getter, settting, toString ` 等方法 data class User(val name: String, val sex: String, val email: String, val age: String) 複製程式碼
-
擴充套件函式替代了很多 Utils 類
-
告別 findViewById,比 ButterKnife 更好用
import kotlinx.android.synthetic.main.view_toolbar.* open class WebContainerActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_web_page) toolbar.title = "I am title " } } 複製程式碼
-
作用域函式讓你愛不釋手
-
強大的表示式語句,使用
when
替代switch
和if else
AppConfig.get().apply { when(EnvPreferences.getEnv(app)) { ONLINE -> { ... } PREPARE -> { ... } DAILY -> { ... } } } 複製程式碼
投入成本
整個專案重構大概花了兩週左右(包括學習 Kotlin 的時間),過程還是很順利的,且已成功上線了一個版本。
感想
因為一直都是使用 Java 開發,使用 Kotlin 之後,感覺就像開啟了新世界,原來寫程式碼可以這麼爽,這麼酷!
這裡也推薦大家看下這個短視訊,3分鐘左右,是關於國外開發者如何看待 Kotlin,裡面還有 Android 大牛 Jake Wharton 哦
Android Developer Story: Kotlin + Android increasing developer happiness and productivity
不過由於剛接觸不久,接下來會去深入瞭解一下 Kotlin 一些高階特性和擴充套件庫,比如:
- 更好用的動態代理
- 真泛性
- kotlinx.coroutines,一個更好用的可替代執行緒的庫
- android-ktx,好用的 Android 擴充套件庫
- ...
最後說下期待,因為得到了 Google 的加持,目測很快 Kotlin 會成為 Android 主流的開發語言,希望在 10 月份的 Kotlin 全球開發者大會,可以有更多的大招可以釋放出來。
Kotlin 實在太好用了,最後,還是抽象總結一下,使用 Kotlin 可以為你帶來哪些好處:
- 程式碼簡潔,
- 相容 Java,雙語混寫
- 函數語言程式設計,各種語法糖
- 提升程式設計效率
最後的最後,請允許我借用一張圖來表達(圖侵刪):