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