Ramda js y la programación funcional
Ramda js es una de las librerías que esta adquiriendo más tracción en el universo de JavaScript . Se trata de una librería orientada a la programación funcional como ya lo son Lodash o Underscore . ¿Qué es lo que hace a Ramda js diferente?. Para entenderlo hay que construir un ejemplo concreto con Lodash . Vamos a usar un array con alumnos y calcular la media de todas las notas que sean menores de 5 .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | var lista = [{ nombre: "pepe" , nota: 1 }, { nombre: "ana" , nota: 5 }, { nombre: "gema" , nota: 7 }, { nombre: "angel" , nota: 3 }]; var resultado = _.chain(lista) .map(item=>item.nota) .filter(item=>item<5) .mean() .value(); console.log(resultado); |
Se trata de una operación natural, primero usamos map para quedarnos únicamente con las notas de cada alumno. Acto seguido filtramos las que son menores de 5 con filter. Una vez filtradas usamos el método mean y calculamos la media. Finalmente solicitamos el valor de la media calculada y lo imprimimos en la consola , nos imprimirá 2.
Estamos acostumbrados a esta sintaxis fluida a la hora de trabajar con programación funcional. ¿Cómo enfoca Ramda?
Usando Ramda js
Rambda js es una librería de JavaScript orientada a la programación funcional . Lo que destaca de Ramba js es su enfoque. Vamos a ver el mismo ejemplo anterior con Ramda.
1 | var resultado2=R.mean(R.filter(item=>item<5,R.map(item=>item.nota,lista))); |
El código es diferente y más compacto , pero también más difícil de entender en un primer momento. Sin embargo es una forma de expresarse más natural y más matemática. Primero se aplica map sobre la lista , después sobre el resultado filter y finalmente mean.
En matemáticas definiríamos el funcionamiento como mean(filter(map())). Al principio no convence mucho . Pero la programación funcional hace mucho hincapié en la reutilización y creación de nuevas funciones. Es en esta parte donde Ramda brilla. Supongamos que queremos generar una función que calcule las notas suspensas:
1 2 | var notasSuspensas=lista=>R.filter(item=>item<5,R.map(item=>item.nota,lista)); var media= R.mean(notasSuspensas(lista)); |
Es muy sencillo ,acabamos de crear una nueva función notasSuspensas a partir de map y filter
Luego hemos usado esa nueva función para calcular la media:
Ramda js nos permite trabajar una forma mucho más natural con los conceptos de programación funcional en javascript. Eso sí tendremos que realizar un esfuerzo a la hora de adaptarnos a la nueva sintaxis.
0 comentarios:
Publicar un comentario