Hoy tocaremos la programación funcional. Más específicamente, veremos la diferencia entre programación declarativa e imperativa.

Primero, repasemos rápidamente los términos. Luego compararemos estos estilos de programación y veremos cómo aparecen en Java y si el lenguaje admite su coexistencia feliz.

La programación funcional es un paradigma donde las funciones se entienden como funciones matemáticas, no como subrutinas, como en la programación procedimental . Es decir, en estos dos paradigmas interpretamos la palabra "función" de manera diferente. Recuerda esto y no los confundas. Java no permite que te confundas, ya que los subprogramas se denominan "métodos", mientras que las funciones se refieren a funciones matemáticas (también: funciones lambda o referencia de método).

En la práctica, en la programación procedimental, las funciones dependen no solo de las variables de entrada, sino también de factores externos (como otras variables fuera de la función o del estado del sistema). Eso significa que llamar a la misma función con los mismos argumentos pero en un contexto diferente puede producir resultados diferentes. En la programación funcional, cuando se llama a una función con los mismos argumentos, siempre produce el mismo resultado, porque las funciones dependen solo de los datos de entrada.

Pros de la programación funcional

  • Fiabilidad del código mejorada
  • Prácticas pruebas unitarias
  • Oportunidades para la optimización del código durante la compilación
  • Oportunidades de concurrencia

Contras de la programación funcional

Las desventajas de la programación funcional se derivan de todas estas mismas características:

  • No hay instrucciones de asignación. En cambio, los nuevos valores se almacenan en nuevas variables, lo que lleva a la necesidad de asignar y liberar memoria constantemente. Como resultado, la recolección de basura altamente eficiente es una parte esencial de cualquier sistema que ejecute programas funcionales.

  • La evaluación no estricta significa que el orden de las llamadas a funciones es impredecible, lo que crea problemas de E/S cuando el orden de las operaciones es importante.

Con esto concluye nuestra rápida revisión de la programación funcional. Ahora pasemos a los estilos de programación.

La programación imperativa es un paradigma de programación caracterizado por las siguientes características:

  • El código fuente del programa consta de instrucciones (declaraciones).

  • Las instrucciones deben seguirse secuencialmente.

  • Los datos generados mediante la ejecución de instrucciones anteriores pueden leerse de la memoria mediante instrucciones posteriores.

  • Los datos obtenidos al ejecutar una instrucción se pueden escribir en la memoria.

Estas son las principales características de los lenguajes imperativos:

  • Uso de variables booleanas.
  • Uso del operador de asignación.
  • Uso de expresiones compuestas.
  • Uso de subrutinas.

Un programa imperativo es como órdenes expresadas en modo imperativo en lenguajes naturales. En otras palabras, un programa imperativo es una secuencia de comandos.

Los lenguajes de programación imperativos incluyen C y C++.

La programación declarativa es un paradigma de programación en el que se especifica la solución a un problema. Es decir, se describe el resultado final, no la forma de lograrlo. HTML es un ejemplo de lenguaje declarativo. Al escribir etiquetas en este idioma, no pensamos en cómo se dibujarán los elementos en la página. Simplemente describimos cómo debería verse la página.

Otro lenguaje de programación declarativo es SQL.

Comparemos los dos estilos de programación considerando un ejemplo de la vida real: ¿cómo le explicamos a una persona cómo llegar a un lugar determinado?

Imagínese esta situación: un hombre se nos acerca en la calle y nos pregunta: "¿Cómo llego al museo?"

Con un planteamiento imperativo, le proporcionaríamos el algoritmo de cómo llegar a pie:

  • dar la vuelta aquí
  • camina 2 cuadras en linea recta
  • gira a la derecha

Con un enfoque declarativo, simplemente daríamos la dirección y luego la persona llegaría al lugar correcto por su cuenta.

Java es actualmente un lenguaje de programación multiparadigma . Multiparadigma significa que el lenguaje admite varios paradigmas.

Durante su larga evolución, el lenguaje ha ampliado su modelo orientado a objetos para que sus usuarios cuenten con diferentes herramientas y puedan elegir la mejor para su tarea específica.

Como resultado, Java actualmente admite tanto el enfoque imperativo (como escribir código para llamadas a métodos) como el enfoque declarativo (como las anotaciones disponibles en tiempo de ejecución).

Resumamos:

  • Hay varios paradigmas de programación.

  • Hay enfoques declarativos e imperativos.

  • Debe elegir el que mejor se adapte a la tarea en cuestión.

  • Java es un lenguaje multiparadigma que admite ambos enfoques.