
使用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以外,其他的作用域函数例如apply、also也都有他们适合的场景,明确他们的含义,将it与this应用到最合适的场景中才能写出漂亮的代码。
本文探讨了Kotlin中with函数的使用技巧及其对代码可读性的影响,并对比了with与其他作用域函数如apply、also的适用场景。
727

被折叠的 条评论
为什么被折叠?



