编码风格
- 编码规范
- 命名风格
- 冒号
- lambdas
- 类声明格式
- Unit
- 函数vs属性
编码风格
命名风格
—使用骆驼命名法(在命名中避免下划线)
—类型名称首字母大写
—方法和属性首字母小写
—缩进用四个空格
—public 方法要写说明文档,这样它就可以出现在 Kotllin Doc 中
冒号
在冒号区分类型和父类型中要有空格,在实例和类型中间是没有空格的
//对于泛型信息的泛型函数的适宜形式
interface Bar
interface FooTestDo<out t : Any> : Bar {
fun fooTest(a: Int): t
}
Lambdas
在 lambda 表达式中,应该在花括号左右以及分隔参数与代码体的箭头左右留空格。 如果一个调用接受单个 lambda 表达式,应该尽可能将其放在圆括号外边传入。
list.filter { it > 10 }
如果为 lambda 表达式分配一个标签,那么不要在该标签与左花括号之间留空格:
fun foo() {
ints.forEach lit@{
// ……
}
}
在多行的 lambda 表达式中声明参数名时,将参数名放在第一行,后跟箭头与换行符:
appendCommaSeparated(properties) { prop ->
val propertyValue = prop.get(obj) // ……
}
如果参数列表太长而无法放在一行上,请将箭头放在单独一行:
foo {
context: Context,
environment: Env
->
context.configureEnv(environment)
}
类声明的格式
参数比较少的类可以用一行标识
//两种写法
class Person {
var id: Int = 0
var name: String = ""
}
class Person1(var id: Int, var name: String)
如果具有较多参数的类应该格式化每个构造函数都位于与缩进的单独行中。此外,结束括号应该在新行上。
如果我们使用继承,那么超类构造函数调用或实现的接口列表应该位于与括号相同的行中
open class PersonFather(open var id: Int, open var name: String)
class PersonTest(override var id: Int,
override var name: String = "",
var surname: String = "") : PersonFather(id, name) {
}
对于多个接口,应该首先定位超类构造函数调用,然后每个接口应该位于不同行中
interface PersonUncle
open class PersonFather(open var id: Int, open var name: String)
class PersonTest(override var id: Int,
override var name: String = "",
var surname: String = "") : PersonFather(id, name), PersonUncle
但是实际输入过程中不遵循也可以,而且自动整理代码也没有提示
Unit
如果函数返回Unit,返回类型应该省略:
fun Test(){
//Unit 被省略
}
函数 vs 属性
在某些情况下,不带参数的函数可与只读属性互换。 虽然语义相似,但是在某种程度上有一些风格上的约定。
底层算法优先使用属性而不是函数:
- 不会抛异常
- 复杂度为O(1)
- 计算开销小(或者在首次运行时缓存)
- 如果对象状态没有改变,那么多次调用都会返回相同结果