Kotlin 支持计算属性但我不确定何时使用它们。
假设我有一堂课:
class Car(val color: String)
并有这个返回的函数true
如果汽车是白色的:
fun isWhite(car: Car): Boolean {
return car.color == "WHITE"
}
现在我希望这个函数是成员函数 (a method);这看起来像这样:
class Car(val color: String) {
fun isWhite(): Boolean = color == "WHITE"
}
但它也可以是这样的:
class Car(val color: String) {
val isWhite: Boolean get() = color == "WHITE"
}
那么,哪一个更好呢?
官方Kotlin 编码约定 https://kotlinlang.org/docs/reference/coding-conventions.html#functions-vs-properties定义在节中功能和属性下列:
在某些情况下,不带参数的函数可以与只读属性互换。尽管语义相似,但在何时更喜欢其中一种方面存在一些风格约定。
当底层算法满足以下条件时,优先选择属性而不是函数:
- 不抛出
- 计算成本低廉(或在第一次运行时缓存)
- 如果对象状态未更改,则在调用中返回相同的结果
所以,我会在上面的例子中使用val
for isWhite
,因为它不会抛出异常,所以字符串比较的计算成本很低,并且color
of the Car
无法改变,因为Car.color
本身定义为val
.
编译差异
请注意,JVM 字节码get()
块将被编译为与函数完全相同的代码。因此,对于编译的字节码,这两种方法是相同的没有性能差异 https://itsronald.com/blog/2016/06/kotlin-get-property-vs-method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)