代碼約定
本文包含了 Kotlin 語言當前的編碼風格。
命名風格
若有疑問,請默認使用Java編碼約定,例如:
- 用駝峰命名法,并避免在名稱中使用下劃線
- 類型名以大寫字母開頭
- 方法和屬性以小寫字母開頭
- 用4個空格縮進
- 公共方法應(yīng)該配有說明文檔
冒號
當冒號分隔了類型和超類型時冒號之前有一個空格;當冒號分隔實例和類型時冒號之前沒有空格,:
interface Foo<out T : Any> : Bar {
fun foo(a: Int): T
}
Lambdas
在 lambda 表達式中,應(yīng)該在大括號周圍以及分割參數(shù)的箭頭周圍使用空格。只要有可能,一個lambda應(yīng)該倍傳遞到括號之外。
list.filter { it > 10 }.map { element -> element * 2 }
在簡短并且不嵌套的lambdas中,建議使用 it
約定 而不是明確聲明參數(shù);
在具有參數(shù)的嵌套lambdas中, 參數(shù)應(yīng)始終明確聲明。
類頭部格式化
有較少幾個參數(shù)的類可以寫成一行
class Person(id: Int, name: String)
具有較長頭部的類應(yīng)該格式化,使得每個主構(gòu)造參數(shù)在有同樣縮進的單獨的行中。
此外,右括號應(yīng)該在新的一行。如果使用繼承,那么父類構(gòu)造函數(shù)的調(diào)用或接口列表應(yīng)該和右括號在同一行。
class Person(
id: Int,
name: String,
surname: String
) : Human(id, name) {
// ...
}
對于多個接口,父類構(gòu)造函數(shù)應(yīng)該放在第一個,并且每一個接口應(yīng)該單獨寫在一行。
class Person(
id: Int,
name: String,
surname: String
) : Human(id, name),
KotlinMaker {
//...
}
構(gòu)造函數(shù)的參數(shù)可以使用常規(guī)縮進或連續(xù)縮進(雙倍的常規(guī)縮進)。
單元 Unit
如果一個函數(shù)返回 Unit
, 返回值類型可以省略不寫:
fun foo() { // ": Unit" 被省略了
}
函數(shù) VS 屬性
在某些情況下,沒有參數(shù)的函數(shù)可能 可以和 只讀屬性 互換。
雖然語義是相似的,但是有一些風格約定是傾向于其中一個的。
在基礎(chǔ)算法中,傾向于屬性而非方法:
- 不拋出錯誤
- 有一個
O(1)
的復(fù)雜度 - 易于計算
- 返回結(jié)果與調(diào)用結(jié)果相同