Kotlin中赋值与赋值表达式的区别及代码优化解析
Kotlin中赋值与赋值表达式的区别
先看你提供的两段代码:
原代码:
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) }
核心区别说明
在Kotlin里,赋值操作本身就是表达式——它会返回被赋予的值。所谓的“赋值语句”只是我们把赋值表达式当作独立语句来使用(不接收它的返回值),二者的本质关系是:赋值表达式是基础,赋值语句是赋值表达式的一种使用场景。
举个直白的例子:
- 写
val x = (y = 5)时,y = 5是赋值表达式,它会返回5,所以最终x的值也是5。 - 单独写
y = 5时,就是把赋值表达式当作语句来执行,只完成赋值动作,忽略它的返回值。
结合你的代码理解
你的两段代码最终效果完全一致,优化建议只是利用Kotlin的链式调用风格调整了结构:
- 原写法里,
returnRequestInfoDate?.text = ...是把let的返回值直接赋值给text,这里的赋值是作为独立语句使用,没用到它的返回值。 - 优化后的写法,用
let处理文本得到转换结果后,调用also来执行赋值逻辑。also的特性是不改变链式调用的返回值(它会返回调用它的原对象),这里的returnRequestInfoDate?.text = it依然是赋值表达式,只是被放到also的lambda里,让代码从“计算值→单独赋值”变成了连贯的链式调用,更符合Kotlin的函数式编码风格。
内容的提问来源于stack exchange,提问作者Manuel AS
相关产品推荐
相关产品推荐

