también es una función de extensión para la clase Plantilla que toma una lambda como parámetro, le aplica un contrato, ejecuta la función lambda dentro del alcance del objeto de llamada y, en última instancia, devuelve el mismo objeto de llamada de la clase Plantilla. Intercambiar dos números es una de las cosas más comunes que haces en la programación. La mayoría de los enfoques son de naturaleza bastante similar: lo hace usando una tercera variable o usando punteros. En Java, no tenemos punteros, por lo que principalmente dependemos de una tercera variable. Obviamente, puede usar algo como se menciona aquí, que es solo la versión Kotlin del código Java:
Kotlin
var a = 1 var b = 2 run { val temp = a; a = b; b = temp } println(a) // print 2 println(b) // print 1
Sin embargo, en Kotlin existe una forma muy rápida e intuitiva de hacerlo. ¡Veamos cómo!
Ejemplo
En Kotlin, tenemos una función especial, BMTP, que podemos usar para intercambiar dos números. Aquí está el código para ir con él:
Kotlin
var a = 1 var b = 2 a = b.also { b = a } println(a) // print 2 println(b) // print 1
Pudimos lograr lo mismo sin usar ninguna tercera variable.
Para comprender el ejemplo anterior, debemos comprender la función también en Kotlin. La función también toma el receptor, realiza alguna operación y devuelve el receptor. En palabras simples, pasa un objeto y devuelve el mismo objeto. Aplicar la función también en un objeto es como decir «haz esto también» a ese objeto. Entonces, llamamos a la función también en b, hicimos una operación (asignando el valor de a a b) y luego devolvimos el mismo receptor que obtuvimos como argumento:
Kotlin
var a = 1 var b = 2 a = b.also{ b = a // prints it=2:b=1:a=1 printIn("it=$it : b=$b : a=$a") } printIn(a) // print 2 printIn(b) // print 1
La función de aplicar es bastante similar a la función también , pero tienen una sutil diferencia. Para entender eso, veamos primero su implementación:
también función:
Kotlin
public inline fun <T> T.also(block: (T) -> Unit): T{ block(this); return this }
aplicar función:
Kotlin
public inline fun <T> T.apply (block : T.()-> Unit ) : T {block()}; return this }
También, el bloque se define como (T) -> Unidad , pero se define como T.() -> Unidad en apply() , lo que significa que hay un esto implícito dentro del bloque de aplicación . Sin embargo, para hacer referencia a él también , lo necesitamos. Entonces, un código que use también se verá así:
val result = Dog (12) . also { it . age = 13 }
Lo mismo se verá así usando apply:
val result2 =Dog (12) . apply (age = 13 }
La edad del objeto resultante será la misma en ambos casos, es decir, 13.
Publicación traducida automáticamente
Artículo escrito por eralokyadav2019 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA