1. 命名风格
- 使用(camelCase)驼峰命名法,避免使用下划线
- 类型以大写字母开头
- 方法和属性以小写字母开头
- 使用四个空格缩进
- 公共部分应该添加描述,会出现在Kotlin的Doc中
2. 冒号的使用
- 当分隔类型和超类型时,冒号前面应该有一个空格
- 当分隔实例和类型时,冒号前面没有空格
interface Foo<out T : Any> : Bar {//第一条规则
fun foo(a: Int): T //第二条规则
}
3. Lambda表达式
- 大括号周围应该使用空格(左边大括号的左右以及右边大括号的左边使用空格)
- 箭头两侧要使用空格
- 尽可能的让表达式写在括号之外(即不推荐将表达式作为参数)
list.filter { it > 10 }.map { element -> element * 2 }
- 在没有嵌套并且比较短的表达式中,推荐使用it作为明确的参数申明
- 在嵌套的表达式中,参数应该总是被明确的申明
4. 类定义
- 类只有少数参数时,可以写成一行
class Person(id: Int, name: String)
- 类有很多参数时,
- 每一个参数应该分行并且缩进书写。
- 右括号独立一行
- 如果使用了继承,那么超类的构造函数调用应该在同一行书写
class Person(
id: Int,
name: String,
surname: String
) : Human(id, name) {
// ...
}
4. 使用了继承并且实现了接口的情况,应该首先调用超类的构造函数,其次再为每一个实现的接口另起一行。
class Person(
id: Int,
name: String,
surname: String
) : Human(id, name),
KotlinMaker {
// ...
}
5.构造函数参数可以使用常规缩进或连续缩进(双倍的常规缩进)。
5. Unit
如果一个方法的返回值是Unit,那么Unit可以省略不写。
fun foo() { // ": Unit" is omitted here
}
6. 方法和属性的选择
在某些情况下,没有参数的函数可能与只读属性可互换通用,虽然语义相似,但是有一些风格约束在某些情况该选择具体的方式,以下情况中,更喜欢使用属性而不是方法
- 不会抛出异常
- 具有O(1)的复杂性
- 容易计算(或者运行一次之后缓存结果)
- 每次调用返回同样的结果
网友评论