Introducción a Scala y configuración del entorno de desarrollo
Introducción al curso y presentación de los objetivos
Scala en la historia
Instalando JVM, SBT y editores
Instalación de las herramientas
¡Hola, Mundo!
Fundamentos de Programación Funcional
Tipos de datos básicos
Inmutabilidad
Expresiones
Funciones
Colecciones: Secuencias, Conjuntos y Mapas
Tuplas y Objetos
La función de copy y el concepto de Lences
Conceptos básicos de Programación Funcional
Pattern Matching
Tail recursion
Agregación
Fundamentos teoricos
Funciones totales y parciales
Razonamiento inductivo
Razonamiento con tipos
Traits
Tipos genéricos
Tipos de datos algebraicos
Evaluación peresoza (Lazy)
Disyunciones: Option
Disyunciones: Either, try
Proyecto de Backend
Introducción e iniciación del proyecto
Modelo por Actores
Modelo de datos
Configuración de Slick
Controladores: Cómo obtener información de la base de datos
Controladores: Crear, actualizar y eliminar información de la base de datos
Computación paralela, asíncrona y concurrente
Serialización
Validación
Manejo de errores en el proyecto
Exportación del proyecto
Conclusiones
Clase final
Lectura
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 “sacar 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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.