Kotlin學習之旅(D6)-Kotlin Idioms part 1

Kotlin學習之旅第六天

今天的主題是:Kotlin中的習慣用法-第一部分

前言

Kotlin學習之旅(D1)-學習計劃&基本語法

Kotlin學習之旅(D2)-基本語法

Kotlin學習之旅(D3)-類與繼承

Kotlin學習之旅(D4)-函數與Lambda表達式

Kotlin學習之旅(D5)-高級語法

習慣用法

  • 創建DTOs

  • 函數的默認參數

  • 過濾list

  • String字符串模板

  • 類型判斷

  • 遍歷Map

  • 擴展函數

  • 創建單例

    —————————————————— Part 1

  • 使用表達式

  • 靜態方法

  • 使用命名參數替代setter

  • 使用apply()

  • 處理可空對象

  • 使用as替代is

  • 快速創建JSON

創建DTOs

在Android中,我們經常需要創建Bean,也就是包括了setter,getter,toString等常見代碼的一種類,一般用於接收後臺返回的JSON格式的數據,在Kotlin裏面,我們可以用很簡單的語法完成Bean類的編寫:

data class Customer(val name: String, val email: String)

我們定義了一個Customer類,構造方法傳入兩個參數name, email,這個類包括以下方法:

  • 所有屬性的 getters (對於 var 定義的還有 setters)
  • equals()
  • hashCode()
  • toString()
  • copy()

在Kotlin中,這種類也叫做數據類,data class,一個關鍵字即可完成之前在Java裏面需要寫的大量模板代碼,是不是很方便呢?

函數的默認參數

這個之前在講函數的時候也提到過,可以減少重載方法的數量

fun foo(a: Int = 0, b: String = ""){...}

這裏定義了一個foo函數,傳入a,b兩個參數,其中a的默認值爲0,b的默認值爲空字符串

那麼在調用foo的時候,我們可以直接寫

foo()

不傳a,b的話,就使用默認值進行運算。

過濾list

val positives = list.filter { x -> x > 0 }

或者可以更短:

val positives = list.filter { it > 0 }

String字符串模板

這個之前也提到過,就是在字符串裏面,加入其它的字符串變量,在Java中,需要通過format函數來進行賦值,在kotlin中也是變得更加簡潔:

println("Name $name")

$ 加上 變量名 就可以實現在String中插入變量的功能

類型判斷

這個特性是經常會用到的,例如在解析JSONObject,或者是需要把JSON轉成需要的數據類型時,以前的寫法

if(json.getXXX != null){
    if (json.getXXX instanceOf Foo){
        ....
    } else if (json.getXXX instanceOf Bar){
        ...
    } else {
        ...
    }
}

在Kotlin中,通過when + is 來實現

when (x) {
    is Foo //-> ……
    is Bar //-> ……
    else   //-> ……
}

是不是一目瞭然,媽媽再也不用擔心我看代碼看到心煩意亂了?

遍歷map/pair類型的list

for ((k, v) in map) {
    println("$k -> $v")
}

如果是在Java裏面,我們需要通過key來找value,然後再輸出,代碼量又是蹭蹭的往上串

擴展函數

emmm,這個之前在函數那一篇文章裏面已經講得比較清楚了,忘了的童鞋可以重溫一下:Kotlin學習之旅(D4)-函數與Lambda表達式

直接上代碼:

fun String.spaceToCamelCase() { …… }

"Convert this to camelcase".spaceToCamelCase()

String裏面是沒有spaceToCamelCase這個方法的,但是我們又不想通過繼承讓所有子類都加上這個方法,那麼可以通過擴展函數來實現。

創建單例

單例模式我們經常都會用到,在Java裏面的寫法也是多種多樣,但是所有形式的代碼量都沒有Kotlin裏面來的簡潔:

object Resource {
    val name = "Name"
}

沒錯,就是通過object關鍵字定義單例。

總結

這些習慣用法都是前人通過大量實踐總結出來的,可以提高我們的開發效率,所以我們也應該多學習這些用法,努力讓自己寫出來的代碼簡潔易懂。

Day 6 - Learn Kotlin Trip, Completed.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章