【Kotlin】this还是it?合理使用with操作符

本文探讨了Kotlin中with函数的使用技巧及其对代码可读性的影响,并对比了with与其他作用域函数如apply、also的适用场景。

在这里插入图片描述

使用with优化代码


在这里插入代码片下面是一段常见的UI配置逻辑:

applicationWindow.title = "Just an example"
applicationWindow.position = FramePosition.AUTO
applicationWindow.content = createContent()
applicationWindow.show()

applicationWindow需要反复调用,此时我们可以with进行优化,使代码更加简洁易读

with(applicationWindow) { // this: ApplicationWindow
    title = "Just an example"
    position = FramePosition.AUTO
    content = createContent()
    show()
}

with(..){...}本质上是对带有receiver的扩展函数的封装

fun <T, R> with(receiver: T, block: T.() -> R): R =
    receiver.block()

既然with这么棒,为什么不更多地使用呢?

Kotlin中源码中充满对带有receiver的扩展函数的应用,例如filter

fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T>

使用时:

persons.filter { it.firstName == name }

此处的it,可以很好地提示给开发者persons的属性是firstName而非name

如果我们定义成predicate: T.() -> Boolean,使用时:

persons.filter { firstName == name }

可读性就有it.firstName那么好了。

平衡性很重要


The key quality of the code that we are looking to achieve is not concision, but readability
代码的可读性相对于简洁更重要

代码过长容易导致无谓的重复;代码过于精简又会隐含了大量的上下文,增加理解成本。所谓好的代码需要在可读性和简洁性中做一个tradeoff。

合理使用Kotlin


Kotlin提供了灵活的语法特性,可以写出相对于Java更加简洁的代码。但我们也要注意避免“矫枉过正”、一味追求代码简洁因而影响了可读性。另外,除了with以外,其他的作用域函数例如applyalso也都有他们适合的场景,明确他们的含义,将itthis应用到最合适的场景中才能写出漂亮的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fundroid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值