Octava clase
22 de Mayo, 2023
Tarea para la clase que viene:
- Continuar con la segunda entrega del TP integrador
- Terminar de resolver el simulacro de parcial Haskell Chef
- Seguir realizando parciales para practicar.
¿Qué vimos hoy?
Practicamos con el simulacro de parcial Haskell Chef.
Funciones para modificar un campo de una estructura
En parciales es muy común que tengamos estructuras de datos complejos y se repita la idea de querer “modificar” uno de los campos de esta estructura. Por ejemplo, si tenemos una persona con nombre, apellido y edad y queremos hacer que cumpla años o duplicar su edad o hacer que cumpla 100 años, etc. Estas funciones terminarían con una lógica muy similar entre sí:
cumplirAños :: Persona -> Persona
cumplirAños unaPersona = unaPersona { edad = edad unaPersona + 1 }
duplicarEdad :: Persona -> Persona
duplicarEdad unaPersona = unaPersona { edad = edad unaPersona * 2 }
cumplir100Años :: Persona -> Persona
cumplir100Años unaPersona = unaPersona { edad = 100 }
¡Esta repetición de lógica la podemos evitar de la misma forma que siempre! 🙌 Extrayendo la lógica común en una función.
modificarEdad :: (Int -> Int) -> Persona -> Persona
modificarEdad unaFuncion unaPersona = unaPersona { edad = unaFuncion . edad $ unaPersona }
Ahora, podemos escribir nuestras funciones anteriores en función de modificarEdad
:
cumplirAños :: Persona -> Persona
cumplirAños unaPersona = modificarEdad (+ 1) unaPersona
duplicarEdad :: Persona -> Persona
duplicarEdad unaPersona = modificarEdad (* 2) unaPersona
cumplir100Años :: Persona -> Persona
cumplir100Años unaPersona = modificarEdad (const 100) unaPersona
El crear estas funciones auxiliares nos trae un montón de ventajas:
- Evitamos la repetición de lógica.
- Nos facilita usar composición (en el caso que queramos modificar dos campos distintos a la vez, sólo necesitamos componer dos de estas funciones).
- Agrega una pequeña capa de abstracción entre nuestra lógica de dominio y la estructura de nuestros datos. Esto hace que si nuestra estructura cambia, las únicas funciones que se ven afectadas son las auxiliares, y no las de dominio.
Links Útiles
Y saber mas sobre nosotros acá