Kotlin支持computed properties
,但是我不确定何时使用它们。
让我说一堂课
class Car(val color: String)
,并且如果汽车是白色的,则具有返回true
的功能:
fun isWhite(car: Car): Boolean {
return car.color == "WHITE"
}
现在我希望此函数为member function
,如下所示:
class Car(val color: String) {
fun isWhite(): Boolean = color == "WHITE"
}
但它也可以像这样:
class Car(val color: String) {
val isWhite: Boolean get() = color == "WHITE"
}
那有什么更好的呢?
答案 0 :(得分:11)
官方Kotlin Coding Conventions在功能与属性部分中定义以下内容:
在某些情况下,不带参数的函数可以与只读属性互换。尽管语义相似,但是在何时首选一个相对另一个上存在一些样式约定。
在使用基础算法时优先使用函数的属性:
- 不扔
- 计算便宜(或在第一次运行时计算)
如果对象状态未更改,- 通过调用返回相同的结果
因此,在以上示例中,我将val
用作isWhite
,因为它不会抛出异常,因此String比较比较便宜,而color
的{{1}} }不能更改,因为Car
本身定义为Car.color
。
编译差异
请注意,val
块的JVM字节码将被编译为与该函数完全相同的代码。因此,这两种方法都来自编译后的字节码相同的there is no performance difference。
答案 1 :(得分:-1)
个人偏好。
我的观点是,如果您不需要传递任何内容,则将其创建为属性。
但是,如果您需要传递更多信息,则它必须是一个函数!