Kotlin 初嘗之專案實踐總結

汪海游龍發表於2018-09-01

前言

記不清什麼時候翻 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,官方已經提供很詳細的指導文件,簡單說下,分為兩步:

  1. 升級 Android Studio 到 3.0 版本以上
  2. 新增 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 替代 switchif 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 可以為你帶來哪些好處:

  1. 程式碼簡潔,
  2. 相容 Java,雙語混寫
  3. 函數語言程式設計,各種語法糖
  4. 提升程式設計效率

最後的最後,請允許我借用一張圖來表達(圖侵刪):

Kotlin 初嘗之專案實踐總結

關聯閱讀

Gradle指南之從Groovy遷移到Kotlin

關於我

Kotlin 初嘗之專案實踐總結

相關文章