在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