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