Kotlin編碼約定/編碼風格
在本篇文章中,主要是介紹Kotlin語言的當前編碼風格。
命名風格
如果有疑問,請使用Java編碼約定,例如:
- 使用駝峯名稱格式(並避免在名稱中使用下劃線)
- 類型從大寫字母開始
- 方法和屬性以小寫字母開始
- 使用
4
空格縮進 - 公共函數應該放置到通用文件中,並以Kotlin文檔呈現
冒號
冒號之前有一個空格,冒號分隔了類型和超類型,並且沒有空格,冒號分隔實例和類型:
interface Foo<out T : Any> : Bar {
fun foo(a: Int): T
}
Lambda表達式
在lambda表達式中,大括號周圍應該使用空格,以及將參數與主體使用箭頭分開。 只要有可能,lambda應該傳遞到括號之外。
list.filter { it > 10 }.map { element -> element * 2 }
在短而且不嵌套的lambdas中,建議使用它的慣例,而不是明確聲明參數。 在具有參數的嵌套lambdas中,參數應始終要明確聲明。
類頭格式化
有幾個參數的類可以寫成一行:
class Person(id: Int, name: String)
具有較長頭的類應格式化,每個主構造函數參數使用單獨的行縮進。 此外,右括號應該在新的一行。 如果使用繼承,則超類構造函數調用或實現接口列表應位於與括號相同的行上:
class Person(
id: Int,
name: String,
surname: String
) : Human(id, name) {
// ...
}
對於多個接口,超類構造函數調用應首先定位,然後每個接口應位於不同的行中:
class Person(
id: Int,
name: String,
surname: String
) : Human(id, name),
KotlinMaker {
// ...
}
構造函數參數可以使用常規縮進或連續縮進(雙倍的常規縮進)。
Unit 編碼風格
如果函數返回Unit
,則返回類型應該省略:
fun foo() { // ": Unit" is omitted here
}
函數和屬性
在某些情況下,沒有參數的函數與只讀屬性可互換。雖然語義是相似的,但是有一些風格約定的時候可適當選擇使用。
當用在基礎算法時,屬性優先於函數情況:
- 不拋出
- 具有O(1)複雜性
- 是廉價的計算(或caсhed在第一次運行)
- 通過調用返回相同的結果