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