在Kotlin中,赋值和赋值表达式的区别是什么?

dhxwm5r4  于 2023-03-19  发布在  Kotlin
关注(0)|答案(1)|浏览(224)

我有这个代码:

fun bind(item: ReturnRequestRowVO) {
    returnRequestInfoDate?.text = item.dateReturnPurchaseText?.let {
      HtmlCompat.fromHtml(it, HtmlCompat.FROM_HTML_MODE_COMPACT)
    }
    setupReturnRequestBtn(item)
  }

Android Studio建议:

如果应用更改:

fun bind(item: ReturnRequestRowVO) {
    item.dateReturnPurchaseText?.let {
      HtmlCompat.fromHtml(it, HtmlCompat.FROM_HTML_MODE_COMPACT)
    }.also { returnRequestInfoDate?.text = it }
    setupReturnRequestBtn(item)
  }

赋值和赋值表达式的区别是什么?

2hh7jdfx

2hh7jdfx1#

赋值语句是将值设置为某个值的语句,而表达式是返回某个值的语句。

// Assignment: nothing returns from the = operator.
val a = 1 

// Expression: it returns 8 (although you're not storing it anywhere).
6 + 2

您可以将这些语句中的每一个放在一个方法中,然后:

fun assignment() {
  val a = 2
}

fun assignmentExpression(): Int = 6 + 2

第一个方法的返回类型是Unit,因为=操作符不返回任何东西(即,它不是一个表达式),而第二个方法的返回类型是Int,因为+操作符返回一个Int类型的数字(这使它成为一个表达式)。
我和上面的@marstran看法一致,第一个版本(赋值)更好,因为你只需要赋值,对我来说更直接。
also()返回调用它的对象,在本例中实际上根本不需要这个对象(您没有保留also的结果,而是忽略了它的返回值)。(因此expression-oriented要多得多),编译器建议您使用表达式而不是赋值,因为它给了您更多的灵活性,因为你可以连接表达式上的调用,但不能连接赋值语句,这就是为什么它把赋值语句移到了句末。
此外,如果你想到Git,使用一些你可以连接调用的东西,而不必修改它,在代码评审中保存行更改,如果有人必须对also()返回的值做一些事情。
所以实际上,无论你选择哪一种方法,都取决于你在编码时使用的方法,以及你认为哪一种方法对你的项目更有用。
我不知道在这种情况下的表现,但我不认为这应该太重要。

相关问题