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