Activa las notificaciones para estar al tanto de lo más nuevo en tecnología.

Javascript como lenguaje funcional usando Ramda

Los lenguajes de programación se basan en algún paradigma en particular: pueden ser imperativos, funcionales y/o con objetos. El paradigma de los lenguajes funcionales involucra...

ramda00Los lenguajes de programación se basan en algún paradigma en particular: pueden ser imperativos, funcionales y/o con objetos. El paradigma de los lenguajes funcionales involucra a Haskell, Prolog y Lisp, por ejemplo, y su manera de resolver los problemas en cómputo, y de escribir algoritmos, es muy diferente a usar cualquier lenguaje imperativo, como Pascal o C. Pues bien, con Ramda, Javascript, imperativo de origen, bien podría usar el paradigma funcional.

Ramda es una biblioteca de funciones diseñada para hacer programación funcional en Javascript de manera fácil y poderosa. Ramda, el nombre es una especie de broma basada en lamb-da, como en el cálculo lambda en donde lamb es una joven oveja y Ram es una oveja macho. La idea de la biblioteca es hacer programación funcional sin cambiar la naturaleza de Javascript. Esto “trabaja con el lenguaje”. Por ejemplo, en Javascript uno puede dar una función con un número variable de argumentos. Si se dan menos de los que la función requiere, usualmente no funciona, pero si se dan de más, entonces se ignoran los sobrantes. Ahora se puede dar pocos argumentos para obtener una nueva función sin necesidad de especificar esos parámetros.

Por ejemplo, en Rambda, el método prop(p,obj) regredsa la propiedad p del objeto obj. Esto es:

var value=R.prop(‘myProperty’,obj);

regresa el valor de obj.myProperty con los dos parámetros especificados. Sin embargo, si se escribe:

var getprop=R.prop(‘myProperty’);

Entonces la propiedad “curry” crea una nueva función, la cual regresa el valor de myProperty en el objeto especificado, es decir:

var value=getprop(obj);

regresa obj.myProperty.

Este proceso, llamado “currying” es algo que tiene que ver con la programación funcional porque da una manera de construir una nueva función usando composición. Por ejemplo, add(a,b) suma dos números juntos y mult(a,b) los multiplica. Se puede usar la composición y el auto-currying para construir una nueva función:

var plusonetimestwo=R.compose(R.mult(2),R.add(1));

La composición aplica las funciones una seguido de la otra usando autocurrying si es necesario. La primera función add usa curry para crear una función add y entonces se usa curry en la función mult para crear la función que multiplica por dos y que se aplica a la función add. Esto es:

R.mult(2,R.add(1,arg));

dode arg es el parámetro restante. Por lo tanto, si se escribe:

var value=plusonetimetwo(3);

se obtiene

R.mult(2,R.add(1,3));

Autocurrying en Ramda da más que un sabor tipo funcional a la programación. De hecho, hay otras bibliotecas funcionales para Javascript, por ejemplo, Underscore y Lodash, pero Ramda indica que la forma en que ellos hacen las cosas da una manera más eficiente de programación funcional.

Se puede usar Ramda con Node.js o en un navegador y es de código abierto. El problema es que la documentación no parece ser muy buena. Digamos que hace falta trabajo en este rubro.

Referencias:

Ramda (introducción)
Ramda (GitHub)
i-programmer

Comentarios