1. 命名風(fēng)格
- 使用(camelCase)駝峰命名法,避免使用下劃線
- 類型以大寫字母開頭
- 方法和屬性以小寫字母開頭
- 使用四個空格縮進(jìn)
- 公共部分應(yīng)該添加描述,會出現(xiàn)在Kotlin的Doc中
2. 冒號的使用
- 當(dāng)分隔類型和超類型時,冒號前面應(yīng)該有一個空格
- 當(dāng)分隔實例和類型時,冒號前面沒有空格
interface Foo<out T : Any> : Bar {//第一條規(guī)則
fun foo(a: Int): T //第二條規(guī)則
}
3. Lambda表達(dá)式
- 大括號周圍應(yīng)該使用空格(左邊大括號的左右以及右邊大括號的左邊使用空格)
- 箭頭兩側(cè)要使用空格
- 盡可能的讓表達(dá)式寫在括號之外(即不推薦將表達(dá)式作為參數(shù))
list.filter { it > 10 }.map { element -> element * 2 }
- 在沒有嵌套并且比較短的表達(dá)式中,推薦使用it作為明確的參數(shù)申明
- 在嵌套的表達(dá)式中,參數(shù)應(yīng)該總是被明確的申明
4. 類定義
- 類只有少數(shù)參數(shù)時,可以寫成一行
class Person(id: Int, name: String) - 類有很多參數(shù)時,
- 每一個參數(shù)應(yīng)該分行并且縮進(jìn)書寫。
- 右括號獨立一行
- 如果使用了繼承,那么超類的構(gòu)造函數(shù)調(diào)用應(yīng)該在同一行書寫
class Person(
id: Int,
name: String,
surname: String
) : Human(id, name) {
// ...
}
4. 使用了繼承并且實現(xiàn)了接口的情況,應(yīng)該首先調(diào)用超類的構(gòu)造函數(shù),其次再為每一個實現(xiàn)的接口另起一行。
class Person(
id: Int,
name: String,
surname: String
) : Human(id, name),
KotlinMaker {
// ...
}
5.構(gòu)造函數(shù)參數(shù)可以使用常規(guī)縮進(jìn)或連續(xù)縮進(jìn)(雙倍的常規(guī)縮進(jìn))。
5. Unit
如果一個方法的返回值是Unit,那么Unit可以省略不寫。
fun foo() { // ": Unit" is omitted here
}
6. 方法和屬性的選擇
在某些情況下,沒有參數(shù)的函數(shù)可能與只讀屬性可互換通用,雖然語義相似,但是有一些風(fēng)格約束在某些情況該選擇具體的方式,以下情況中,更喜歡使用屬性而不是方法
- 不會拋出異常
- 具有O(1)的復(fù)雜性
- 容易計算(或者運行一次之后緩存結(jié)果)
- 每次調(diào)用返回同樣的結(jié)果