Función Apply en Builder

15/32

Lectura

En Kotlin tenemos varias ventajas, una de ellas son las Scope Functions, estas funciones nos ayudan a manipular nuestras instancias, creando un bloque de memoria pequeño para modificar y obtener las instancias de manera segura. Existen 5 diferentes tipos de scope functions que tienen unas propiedades particulares y son: let, run, with, apply, y also.

La propiedad particular es que dentro de nuestra lambda function y la scope function podemos tener el contexto de nuestra instancia de la manera de un it o implícitamente como un this. Además de tener el contexto también tenemos el retorno, que puede ser la misma instancia o un nuevo valor de retorno.

Para la función apply, nosotros tenemos el contexto this y nos retorna la misma instancia, en pocas palabras es equivalente a retornar un this ya modificado, la ventaja con la scope function es que no tenemos que crear funciones ni delegarlo a otra clase. Veamos un ejemplo.

En primer lugar, creamos un data class de ejemplo:

data class ExampleUser (

  

	var name: String,

  

	var lastName: String = "",

  

	var id: String = "" , 

  

	var photoURL: String = "",

  

	var country: String = ""

  

)


Luego, veamos cómo usamos el apply:

class ApplyExampleClass {

  

init {

  

var exampleUser = ExampleUser("Cristian")

  

exampleUser = exampleUser.apply {

  

lastName = "Villamil"

  

country = "Colombia"

  

}

  

println(exampleUser)

  

}

  

}

Como podemos observar, en primer lugar creamos una instancia de ExampleUser, luego a esa instancia le aplicamos unos nuevos valores con la función apply, en la función tenemos el contexto implícito como un this, por eso podemos usar sus variables y modificarlas para que posteriormente me retorne la misma instancia ya modificada y yo pueda volverla a guardar en la misma variable. En conclusión, esta es otra manera de crear un patrón Builder en Kotlin. En la clase lo vimos de manera distinta con fines de aprender la base del patrón de diseño.

Aportes 6

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Apply aplica nuevos valores a las instancias

Me parece muy interesante Apply ya que nos será de mucha ayuda para implementar valores a nuestras instancias 😄

Un ejemplo se implementación Apply, asignando nuevos valores. Teniendo en el constructor parámetros por defectos.

Construcción de la clase Car

class Car(
    var license: String,
    var driver: String
) {
    var id: String = ""
    var passenger: Int = 0
        set(value) {
            if (value <= 4)
                1..4
            else
                throw AssertionError("En mi Car solo caben 4 pasajeros")
            field = value
        }
}
fun main() {
    Car(license = "ABC-001", driver = "Anahí Salgado").apply {
        id = "01"
        license = "BXD-002"
        driver = "Cristian Villamil"
        passenger = 4
        println("El Identificador $id, con licencia $license, perteneciente a $driver, dispone de $passenger pasajeros")
    }
}

Excelente!

Muy util esta forma de usar el Builder

Genial (Y)