关于Kotlin代码风格。什么时候使用field?.let {it.doSomething()},什么时候直接使用field?.doSomething()

时间:2019-02-25 00:51:24

标签: kotlin

最近,我在Kotlin中遇到了一些有关代码样式的问题。我不知道哪种代码风格更好。

假定此处有可为空字段:

var scoreView: TextView? = null
val bgImageView: ImageView? = null

我想这样写:

fun foo() { 
    scoreView?.apply {
       text = getScore()
       textColor = getColor()
       ...
    }

    bgImageView?.apply {
        Glide.with(context)
             .load(xxx)
             .into(this)
    }
}

我的团队负责人想将其更改为:

fun foo() {
    scoreView?.text = getScore()
    scoreView?.textColor = getColor()
    ...
    Glide.with(context)
         .load(xxx)
         .into(bgImageView?:return)
}

我觉得两者都可以,但我更喜欢第一个,因为我可以写更少的“ xxView?”。

我想知道是否有一些代码样式或规则。或一些对此的普遍看法。

谢谢。

1 个答案:

答案 0 :(得分:2)

根据Kotlin的official coding style,当您调用主要与一个对象进行交互的多个函数时,将代码放在.apply之类的范围函数中是一种惯用的方法。当然,您的工作场所可能会使用不同的约定,因此一定要向您的团队负责人询问。

在第一个示例中,您正将apply用于其设计目的:在一个对象上设置多个属性,并在这些情况下增强可读性。

scoreView?.apply {
   text = getScore()
   textColor = getColor()
   ...
}

在第二个示例中,apply函数用于分隔作用于可空对象bgImageView上的代码。样式指南支持这种用法,尽管在这些可为空的情况下似乎更强烈推荐let

bgImageView?.apply { 
    Glide.with(context)
         .load(xxx)
         .into(this)
}

bgImageView?.let { 
    Glide.with(context)
         .load(xxx)
         .into(it)
}

样式指南还介绍了withalsorun函数中的intended uses