在Kotlin中交换函数
有没有更好的方法来写java通用的交换function,而不是java 如何在Java中编写基本的交换function 。
有没有kotlin语言function可以使通用交换function更简洁直观?
Kotlin根本不需要交换function。 您可以使用现有的function,例如:
var a = 1 var b = 2 a = b.also { b = a } println(a) // print 2 println(b) // print 1
如果你想写一些非常可怕的代码,你可以有这样的function:
inline operator fun T.invoke(dummy: () -> Unit): T { dummy() return this }
这将允许你写这样的代码
a = b { b = a }
请注意,我不建议这样做。 只是显示它是可能的。
编辑:感谢@hotkey的评论
我相信交换两个variables的代码很简单 – 不要试图简化它。
恕我直言,最优雅的forms是:
var a = 1 var b = 2 run { val temp = a; a = b; b = temp } println(a) // print 2 println(b) // print 1
优点:
- 意图是大声而清晰的。 没有人会误解这一点。
-
temp
不会留在范围内。
Kotlin鼓励尽可能使用不可变数据(例如使用val
而不是var
)。 这大大减少了对细微错误的改变,因为如果值不改变,可以更合理地推理代码。
交换两个值是非常相反的不可变数据:我的意思是交换之前或之后的价值?
考虑用以下不可改变的方式重写你的代码:
val a = 1 val b = 2 val (a2, b2) = b to a
这通过使用解构声明以及创建Pair
的内置扩展函数来工作。
这是一个很好的用法:
var a = 1 var b = 2 with(a) { a = b b = this } println(a) // 2 println(b) // 1