原文地址
命名样式:
<ul>
默认为Java编码规范,例如:
<li>对于名字使用驼峰式(并且避免使用下划线)
<li>类型首字母大写
<li>方法和属性首字母小写
<li>使用4空格缩进
<li>公共方法应该有文档例如Kotlin Doc中出现的那样
</ul>
冒号
当冒号隔开父类和子类时这里有空格,但是当冒号隔开实例和类型时这里没有空格。
interface Foo<out T : Any> : Bar {
fun foo(a: Int): T
}
Lambdas
在lambda表达式中,空格应该被使用在花括号的旁边。和分割方法体外的箭头一样。只要可能,lambda应该在括号之外传递
list.filter { it > 10 }.map { element -> element * 2 }
简洁和非嵌套的lambda。推荐使用it而不是明确的声明参数。在带参数的嵌套lambdas中,参数应该被明确声明。
Class header formatting
带参数的类能够用一句话实现
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
}
Functions vs Properties //注:并不是很明白这段
在某些情况下无参函数和只读属性是可交换的。尽管语义相似。但是有些惯例供我们选择。
下面的情况我们应该选用一个属性
<ul>
<li>无异常抛出
<li>时间复杂度为O(1)
<li>很容易计算或者第一次执行会被缓存
<li>通过调用返回相同的结果
</ul>