Usar programación funcional en Javascript te hace mejor desarrollador

Cuando activas tu modo programador y picas la primera línea de código en el proyecto, aunque no lo sepas, vas a convertirte en arquitecto de software ya que tendrás que elegir la mejor forma de organizar tu código. Quedarte con uno de los 3 paradigmas predominantes, sabiendo que no habrá una vuelta a atrás, aquella forma que mejor se adapte al tipo de proyecto y el equipo. Tus opciones son:

La programación orientada a objetos esta sobrevalorada

Es tradición que en escuelas y universidades te den un primer acercamiento con un lenguaje imperativo, como puede ser C/C++, Java, Python o PHP. Sin una formación adecuada, los alumnos engordan sus ficheros haciendo que crezcan sin un fin aparente. Lo cual es natural ya que primero deben romper mano con los elementos esenciales como las variables, bucles, condicionales, arrays… Cuando llegan, o llegamos, a crear los primeros programas son imposibles de mantener. No recuerdan bien como funciona por no existir límites ergo modificar una sola línea provocaría una reacción en cadena imposible de predecir por la mala estructura. Por descontado realizar testing es desconocido e inútil por su parte. ¿Cómo se ayuda al alumno? ¿Qué hacen los profesores? Dar un paradigma capaz de separar todo el código en secciones y sea compatible con el lenguaje: programación orientada a objetos.

El paradigma no es gratuito, esta llena de conceptos propios: abstración, herencia, poliformismo, interfaces… Si eres capaz de esforzarte en asimilar todo esa locura de herramientas, ¿para que irte a otro paradigma? Es utilizado por casi cualquier lenguaje moderno, muchos Frameworks lo utilizan como base y hay muchos compañeros que pueden ayudarte. Puede que en este punto, y justo en este preciso momento, caigas en la trampa de pensar: “La programación orientada a objetos es la mejor, no necesito aprender otros paradigmas”. Justo aquí te puedes perder la magia de la programación funcional.

Si piensas de esa manera me gustaría que te hicieras las siguientes preguntas:

La realidad es que no usamos OOP, lo admiramos e intentamos alcanzarlo pero no es práctico en tu día a día. Después de todo cuando desarrollamos pequeños script no hay la necesidad de liarnos ha hacer un objeto con su constructor e interfaces, y cuando el proyecto es grande hacemos uso de algún Framework.

¿Eso significa que no debemos aprenderlo? Tienes que saber todas sus entrañas por muy profundas que que sean. Es útil, no hay paradigma inútil, y gran parte del software esta estructurado de esta manera. Javascript no deja de intentar acercarse creando abstraciones compatibles. Pero conocer algunos conceptos básicos de la programación funciona, no hace falta que aprendas Monadas, harán tu trabajo más limpio y sencillo.

¿Qué ventajas posee la programación funcional respecto a la programación orientada a objetos?

Pros:

Contras:

Algunas funciones básicas con Javascript

No voy a realizar una extensa guía de las equivalencias o un tutorial que enseñe PF, solo hablar de las funciones más conocidas que son excelentes para empezar.

Find

Vamos a obtener el primer nombre que empiecen por ‘M’.

let personajes = ['Homer', 'Marge', 'Lisa', 'Bart', 'Maggie'];
let personajeM = personajes.find((nombre) => nombre[0] === 'M');
// "Marge"

Filter

Vamos a obtener todos los nombres que empiecen por ‘M’.

let personajes = ['Homer', 'Marge', 'Lisa', 'Bart', 'Maggie'];
let personajesConM = personajes.filter((nombre) => nombre[0] === 'M');
// ["Marge", "Maggie"]

Reduce

Vamos a contar cuantas letras tienen todos los nombres.

let personajes = ['Homer', 'Marge', 'Lisa', 'Bart', 'Maggie'];
let totalLetras = personajes.reduce((total, nombre) => total += nombre.length, 0);
// 24

Map

En esta ocasión haremos que todo el contenido esté en mayuscula.

let personajes = ['Homer', 'Marge', 'Lisa', 'Bart', 'Maggie'];
let personajesMayusculas = personajes.map((nombre) => nombre.toUpperCase());
// ["HOMER", "MARGE", "LISA", "BART", "MAGGIE"]

Some

Vamos a preguntar si existe algún personaje que tenga en su nombre un ‘gg’ (doble ‘g’).

let personajes = ['Homer', 'Marge', 'Lisa', 'Bart', 'Maggie'];
let existeUnGG = personajes.some((nombre) => nombre.includes('gg'));
// true

Every

Vamos a preguntar si todos los nombres tienen la letra “a”. Nos dará un resultado negativo por culpa de “Homer”.

let personajes = ['Homer', 'Marge', 'Lisa', 'Bart', 'Maggie'];
let todosConA = personajes.every((nombre) => nombre.includes('a'));
// false

Algunas herramientas o recursos

Si quieres continuar tu viaje por la programación funcional aplicado a Javascript te recomiendo para las variables inmutables una librería llamada .

Si deseas que todas tus funciones tengan un comportamiento como las funciones del ejemplo, nada mejor que . Traducen todas ellas para unificar el comportamiento. ¡Es el lodash de la programación funcional en Javascript!

El libro más recomendado para aprender PF es . Se escribió con la intención de explicar a una persona que no tenía ningún concepto de programación como se trabajaba con Haskell, el lenguaje por antonomasia de la programación funcional.

Y si quieres olvidarte de parches y realmente escribir programación funcional con todos sus superpoderes en Javascript puedes valerte de 2 frameworks maravillosos: y

Versión escritorio