when new fun kotlin

new - when function kotlin



FunciĆ³n de intercambio en Kotlin (5)

Edit: Gracias a @hotkey por su comentario.

Creo que el código para intercambiar dos variables es lo suficientemente simple, no para intentar simplificarlo más.

La forma más elegante de implementación IMHO es:

var a = 1 var b = 2 run { val temp = a; a = b; b = temp } println(a) // print 2 println(b) // print 1

Beneficios:

  • La intención es fuerte y clara. nadie lo malinterpretaría
  • temp no se mantendrá en el alcance.

¿Hay alguna otra forma mejor de escribir una función de intercambio genérica en kotlin que no sea la forma java descrita en Cómo escribir una función de intercambio básica en Java ?

¿Existe alguna función de lenguaje kotlin que pueda hacer que la función de intercambio genérico sea más concisa e intuitiva?


Ese es un buen uso para with :

var a = 1 var b = 2 with(a) { a = b b = this } println(a) // 2 println(b) // 1


Kotlin recomienda el uso de datos inmutables cuando sea posible (como usar val lugar de var ). Esto reduce en gran medida el cambio de errores sutiles, ya que es posible razonar más profundamente sobre el código si los valores no cambian.

Intercambiar dos valores es muy opuesto a los datos inmutables: ¿Me refiero al valor de a antes o después del intercambio?

Considere reescribir su código de la siguiente manera inmutable:

val a = 1 val b = 2 val (a2, b2) = b to a

Esto funciona haciendo uso de las declaraciones de desestructuración , junto con la función incorporada to extensión que crea un Pair .


No hay necesidad de una función de intercambio en Kotlin en absoluto. Puedes usar la función also existente, por ejemplo:

var a = 1 var b = 2 a = b.also { b = a } println(a) // print 2 println(b) // print 1


Si desea escribir algún código realmente aterrador, podría tener una función como esta:

inline operator fun <T> T.invoke(dummy: () -> Unit): T { dummy() return this }

Eso te permitiría escribir código como este

a = b { b = a }

Tenga en cuenta que no recomiendo esto. Solo demostrando que es posible.