Kotlin支持,computed properties但我不确定何时使用它们.
假设我有一节课:
class Car(val color: String)
Run Code Online (Sandbox Code Playgroud)
并且true如果汽车是白色的,则返回此功能:
fun isWhite(car: Car): Boolean {
return car.color == "WHITE"
}
Run Code Online (Sandbox Code Playgroud)
现在我希望这个函数是a member function,这看起来像这样:
class Car(val color: String) {
fun isWhite(): Boolean = color == "WHITE"
}
Run Code Online (Sandbox Code Playgroud)
但它也可以是这样的:
class Car(val color: String) {
val isWhite: Boolean get() = color == "WHITE"
}
Run Code Online (Sandbox Code Playgroud)
那么更好的是什么?
von*_*ox7 11
官方Kotlin编码约定在Section Functions vs Properties中定义如下:
在某些情况下,没有参数的函数可以与只读属性互换.尽管语义相似,但是对于何时优先选择彼此,存在一些风格约定.
在基础算法时首选属性而不是函数:
- 不扔
- 计算起来很便宜(或在第一次运行时计算)
- 如果对象状态未更改,则在调用时返回相同的结果
所以我会在上面的示例中使用val的isWhite,因为它不扔,字符串比较便宜,计算和color的Car不能改变,因为Car.color本身定义为val.
编译差异
请注意,get()块的JVM字节码将被编译为与函数完全相同的代码.因此两种方法都来自编译后的字节码相同且没有性能差异.
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |