notifications Notificaciones

Marcar todas como leídas

Ver más

lightbulb_outline

194 veces ha sido leído este artículo

¿Qué es la Programación Funcional?

Lo lees en 3 Min.

La programación funcional nos es más que un paradigma de programación, es decir, una forma en la cual nosotros podemos resolver diferentes problematicas.

Functional Programming (Programación Funcional), comúnmente abreviado FP.

Cuando nosotros desarrollamos software utilizando este paradigma, estaremos trabajando principalmente con funciones, evitaremos los datos mutables, así cómo el hecho de compartir estados entre funciones.

Las funciones serán tratadas como ciudadanos de primera clase, es decir, podrán ser utilizadas como entrada y salida de otras funciones.

A las funciones que puedan tomar funciones como parámetros y devolver funciones como resultado serán conocidad cómo función de orden superior.

La programación funcional es un paradigma declarativo. Nos enfocaremos en "qué" estamos haciendo y no en "cómo" se está haciendo (enfoque imperativo). Esto quiere decir que nosotros expresaremos nuestra lógica sin describir controles de flujo; sin ciclos o condicionales.

Veamos un ejemplo utilizando Java.

Java desde su versión 8, está incorporando la programación funcional.

Java, cómo sabemos es un lenguaje orientado a objetos, sin embargo, en versiones recientes nosotros podemos implementar el paradigma de programación funcional.

En este ejemplo, la problemática es conocer la suma total de todos los números de un ArrayList.

ArrayList<Integer> numeros = new ArrayList<>(
 Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));

Nosotros podemos resolver la problema utilizando ciclos y condicionales. Este sería el enfoque imperativo.

  int suma = 0;

  for(int numero : numeros) {
   if(numero > 5)
    suma += numero;
  }
  System.out.println("Resultado final, modo Imperativo : " + suma);

El enfoque declarativo sería el siguiente.

int suma = 0;

suma = numeros.stream().filter(num -> num > 5)
              .mapToInt(Integer::intValue)
              .sum();
System.out.println("Resultado final, modo Declarativo : " + suma);

Cómo observamos, con el enfoque declarativo las líneas de código se reducen y nuestro código se torna un poco más legible. Personas que no tengan conocimientos de programación podría comprender el funcionamiento del programa.

En esta última implementación podemos decir que es funcional, ya que delega el control de flujos y condiciones a funciones (filter y sum).


Cuando nos encontremos trabajando con el paradigma de programación funcional, nos toparemos con conceptos tales cómo:

  • Funciones puras.
  • Composición de funciones.
  • Estados compartidos.
  • Mutabilidad.
  • Efecto secundario.

Expliquemos rápidamente en que consiste cada uno de estos conceptos.

Funciones Puras

Las funciones puras, no son más que funciones, las cuales, dando el mismo input, siempre retornaran el mismo output, además de no tener efectos secundarios.

Composición de funciones

La composición de funciones es el proceso de combinar dos o más funciones, teniendo cómo finalidad ejecutar cada una de estas funciones en secuencia para obtener un resultado en concreto.

> f(x)
> g(x)

> f(g(x))

En este caso combinamos la función f de x con la función g de x.

Estado compartido

El estado compartido es cualquier variable, objeto o espacio de memoria que exista en un ámbito compartido. Un ámbito compartido puede incluir el alcance global o ámbitos de cierre. A menudo, en la programación orientada a objetos, los objetos se comparten entre ámbitos al agregar propiedades a otros objetos.

Materia materia = new Materia();
Usuario usuario = new Usuario();

usuario.materia = materia;
Mutabilidad

Un objeto inmutable es aquel que no puede ser modificado una vez haya sido creado. Por ejemplo, una variable, no es un objeto inmutable.

String caracteres = "ABC";
String nuevaCadana = caracteres.toLowerCase();

En Java los Strings son objetos inmutables.

Efectos secundarios

Un efecto secundario es cualquier cambio de estado en la aplicación que sea observable fuera de la función llamada.

public static int funcion(int x){
 variable_global = 10; //Cambio de valor
 return x + 10;
}

En este caso mi "función", no es una función pura, ya que esta posee efectos secundarios, modifica el valor de una variable externa a la función.

Los efectos secundarios se evitan principalmente en la programación funcional, para tener cómo resultado programas mucho más fáciles de comprender y fáciles de probar.

Lenguajes de programación

Actualmente contamos con una gran cantidad de lenguajes en donde podemos hacer uso de la programación funcional, por ejemplo :

  • Java
  • PHP
  • Ruby
  • Python
  • Elixir
  • Kotling
  • Haskell
  • Erlang

Muchos de estos lenguajes no están cien por ciento enfocados en la programación funcional, lo cuál no es malo, de hecho, estos nos permite hacer una transición de un paradigma a otro, común mente de la programación orientada a objetos a programación funcional.

Conclusión

La programación funcional nos permitirá desarrollar software mucho más legible y fácil de testear, nos concentraremos en qué estamos haciendo y no en cómo.

Y cuéntanos, ¿Haz utilizado programación funcional en tus proyectos?, ¿Qué tal te ha parecido?, ¿Te gustaría aprender y dominar el paradigma?. Déjanos saber todo esto en la sección de comentarios.

Recomendaciones

Clase System

Lo lees en 1 Min.

Una de las clases con las que más nos encontraremos trabajando en nuestro día a día es la clase S...

 

Cómo elegir un framework para el backend

Lo lees en 8 Min.

Una de las decisiones más complicadas que enfrentan los nuevos desarrolladores web, es ¿con qué t...

 

Ejercicios Matriz Java

Lo lees en 1 Min.

Crear un matriz de 5 x 5 Llenar la matriz con números aleatorios. Para obtener un número alea...

 

Ejercicios Arreglos Java

Lo lees en 1 Min.

Crear un arreglo cual nos permita almacenar cien números enteros. Llenar el arreglo con números ...