La funci贸n de copy y el concepto de Lences

12/36

Lectura

La funci贸n copy() y el concepto de Lenses

La funci贸n copy() viene por defecto en cualquier tupla y en cualquier Case Class. Esta funci贸n es muy importante en el contexto de la inmutabilidad ya que nos permite modificar los valores de un objeto sin necesidad de 鈥渟acar sus datos鈥 con apply y tupled.

As铆 entonces, haciendo uso de la funci贸n copy, una posible soluci贸n para el ejercicio de la clase pasada podr铆a ser:

// Dos case class
case class A(id: Int)
case class B(id: Int, a: A)

// obj1 es inmutable
val obj1 = B(1, A(0))
// obj2 es la copia con una copia interna modificada.
val obj2 = obj1.copy(a = obj1.a.copy(1))

Se puede observar que obj1.a.copy no necesita el nombre del atributo puesto que la clase A solo tiene uno. En cambio el obj1.copy s铆 necesita el nombre del atributo debido a que la clase B tiene varios.

Aunque no es un tema que vayamos a profundizar aqu铆, te habr谩s dado cuenta que cuando tienes objetos con muchos m谩s objetos internos en un contexto de inmutabilidad, hacer cambios sobre esos objetos puede ser bastante ca贸tico.

La principal raz贸n, es que en programaci贸n funcional es preferible no tener muchos objetos internos dentro de otros, o dicho de otra manera, es una cuesti贸n de estilo de programaci贸n.

Pero por supuesto, s铆 existen maneras de hacer este proceso menos tedioso, para eso existe algo que se conoce como Lenses (lentes en ingl茅s).

Un Lens es una funci贸n que hace m谩s simple mirar y modificar valores internos dentro de una estructura de datos sin necesidad de demasiado c贸digo.

Existen varias alternativas, pero las dos que quiero nombrar aqu铆 son:

Como dije, no es un tema que vayamos a profundizar aqu铆 puesto que la necesidad de usar este tipo de librer铆as no es muy com煤n, pero de seguro en alg煤n momento s铆 te vendr谩 bien saber que existen.

Aportes 0

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.