Kotlin編碼約定/編碼風格

在本篇文章中,主要是介紹Kotlin語言的當前編碼風格。

命名風格

如果有疑問,請使用Java編碼約定,例如:

  • 使用駝峯名稱格式(並避免在名稱中使用下劃線)
  • 類型從大寫字母開始
  • 方法和屬性以小寫字母開始
  • 使用4空格縮進
  • 公共函數應該放置到通用文件中,並以Kotlin文檔呈現

冒號

冒號之前有一個空格,冒號分隔了類型和超類型,並且沒有空格,冒號分隔實例和類型:

interface Foo<out T : Any> : Bar {
    fun foo(a: Int): T
}

Lambda表達式

在lambda表達式中,大括號周圍應該使用空格,以及將參數與主體使用箭頭分開。 只要有可能,lambda應該傳遞到括號之外。

list.filter { it > 10 }.map { element -> element * 2 }

在短而且不嵌套的lambdas中,建議使用它的慣例,而不是明確聲明參數。 在具有參數的嵌套lambdas中,參數應始終要明確聲明。

類頭格式化

有幾個參數的類可以寫成一行:

class Person(id: Int, name: String)

具有較長頭的類應格式化,每個主構造函數參數使用單獨的行縮進。 此外,右括號應該在新的一行。 如果使用繼承,則超類構造函數調用或實現接口列表應位於與括號相同的行上:

class Person(
    id: Int, 
    name: String,
    surname: String
) : Human(id, name) {
    // ...
}

對於多個接口,超類構造函數調用應首先定位,然後每個接口應位於不同的行中:

class Person(
    id: Int, 
    name: String,
    surname: String
) : Human(id, name),
    KotlinMaker {
    // ...
}

構造函數參數可以使用常規縮進或連續縮進(雙倍的常規縮進)。

Unit 編碼風格

如果函數返回Unit,則返回類型應該省略:

fun foo() { // ": Unit" is omitted here

}

函數和屬性

在某些情況下,沒有參數的函數與只讀屬性可互換。雖然語義是相似的,但是有一些風格約定的時候可適當選擇使用。

當用在基礎算法時,屬性優先於函數情況:

  • 不拋出
  • 具有O(1)複雜性
  • 是廉價的計算(或caсhed在第一次運行)
  • 通過調用返回相同的結果