在本篇文章中,主要是介紹Kotlin語言的當(dāng)前編碼風(fēng)格。
如果有疑問,請使用Java編碼約定,例如:
4
空格縮進(jìn)冒號之前有一個空格,冒號分隔了類型和超類型,并且沒有空格,冒號分隔實(shí)例和類型:
interface Foo<out T : Any> : Bar {
fun foo(a: Int): T
}
在lambda表達(dá)式中,大括號周圍應(yīng)該使用空格,以及將參數(shù)與主體使用箭頭分開。 只要有可能,lambda應(yīng)該傳遞到括號之外。
list.filter { it > 10 }.map { element -> element * 2 }
在短而且不嵌套的lambdas中,建議使用它的慣例,而不是明確聲明參數(shù)。 在具有參數(shù)的嵌套lambdas中,參數(shù)應(yīng)始終要明確聲明。
有幾個參數(shù)的類可以寫成一行:
class Person(id: Int, name: String)
具有較長頭的類應(yīng)格式化,每個主構(gòu)造函數(shù)參數(shù)使用單獨(dú)的行縮進(jìn)。 此外,右括號應(yīng)該在新的一行。 如果使用繼承,則超類構(gòu)造函數(shù)調(diào)用或?qū)崿F(xiàn)接口列表應(yīng)位于與括號相同的行上:
class Person(
id: Int,
name: String,
surname: String
) : Human(id, name) {
// ...
}
對于多個接口,超類構(gòu)造函數(shù)調(diào)用應(yīng)首先定位,然后每個接口應(yīng)位于不同的行中:
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))。
如果函數(shù)返回Unit
,則返回類型應(yīng)該省略:
fun foo() { // ": Unit" is omitted here
}
在某些情況下,沒有參數(shù)的函數(shù)與只讀屬性可互換。雖然語義是相似的,但是有一些風(fēng)格約定的時候可適當(dāng)選擇使用。
當(dāng)用在基礎(chǔ)算法時,屬性優(yōu)先于函數(shù)情況: