高效的Kotlin——属性表示状态而不是行为

属性表示状态而不是行为(Properties should represent state, not behavior)

Kotlin中的属性(property)不同于Java中的域(field),Kotlin中的属性应该看作是field + getter (+ setter):

var name: String? = null
    get() = field?.toUpperCase()
    set(value) {
        if(!value.isNullOrBlank()) {
            field = value
        }
    }

当然对于只读属性val是没有setter的。field也不是必须的,所以说,属性本质上讲就是function。正因为属性是function的本质,在Kotlin中某些方法也可以用属性来表示:

val Context.notificationManager
// or
fun Context.getNotificationManager()

那么什么时候应该使用属性,什么时候应该使用方法呢?这一条就是回答这个问题,基本原则是,属性表示的是状态,方法表示的是行为。在以下典型情形下应该考虑使用方法而不是属性:

  • 存在计算密集型运算,或者计算复杂度非常数O(1)。
  • 包含业务逻辑。
  • 非幂等,即连续多次调用会返回不一样的结果。
  • 方法的执行顺序影响返回值。
  • 可能抛出异常。

你可能感兴趣的:(高效的Kotlin——属性表示状态而不是行为)