ventajas programacion orientada objetos logica imperativa funcional ejemplos desventajas functional-programming

functional programming - programacion - ¿Cuáles son los beneficios de la programación funcional?



programacion imperativa (9)

¿Cuáles crees que son los beneficios de la programación funcional? ¿Y cómo se aplican hoy a los programadores?

¿Cuáles son las mayores diferencias entre la programación funcional y OOP?


Por lo tanto, un buen punto de partida sería tratar de comprender algunas cosas que no son posibles en los lenguajes imperativos, pero que son posibles en los lenguajes funcionales.

Si está hablando de computabilidad, por supuesto no hay nada que sea posible en la programación funcional pero no imperativa (o viceversa).

El objetivo de los diferentes paradigmas de programación no es hacer posibles las cosas que antes no eran posibles, sino facilitar las cosas que antes eran difíciles.

La programación funcional tiene como objetivo permitirle escribir con mayor facilidad los programas que son concisos, libres de errores y paralelizables.


Creo que el ejemplo más práctico de la necesidad de programación funcional es la concurrencia: los programas funcionales son naturalmente seguros para subprocesos y, dado el auge del hardware multinúcleo, esto es de suma importancia.

La programación funcional también aumenta la modularidad; a menudo puede ver métodos / funciones de manera imperativa que son demasiado largos; casi nunca verá una función de más de un par de líneas de longitud. Y como todo está desacoplado, la reutilización ha mejorado mucho y las pruebas unitarias son muy fáciles.


El estilo de la programación funcional es describir lo que desea, en lugar de cómo obtenerlo. es decir: en lugar de crear un bucle for con una variable de iterador y marchar a través de una matriz haciendo algo para cada celda, diría que el equivalente de "esta etiqueta se refiere a una versión de esta matriz donde esta función se ha realizado en todas las elementos."

La programación funcional traslada ideas de programación más básicas al compilador, ideas como listas de comprensión y almacenamiento en caché.

El mayor beneficio de la programación funcional es la brevedad, porque el código puede ser más conciso. Un programa funcional no crea una variable de iterador para ser el centro de un bucle, por lo que este y otros tipos de sobrecarga se eliminan de su código.

El otro beneficio importante es la concurrencia, que es más fácil de hacer con la programación funcional porque el compilador se encarga de la mayoría de las operaciones que solían requerir la configuración manual de variables de estado (como el iterador en un bucle).

Algunos beneficios de rendimiento también se pueden ver en el contexto de un procesador único, según la forma en que se escribe el programa, porque la mayoría de los lenguajes y extensiones funcionales admiten la evaluación diferida. En Haskell puedes decir "esta etiqueta representa una matriz que contiene todos los números pares". Dicha matriz es infinitamente grande, pero puede solicitar el elemento número 100.000 de esa matriz en cualquier momento sin tener que saber, en el momento de inicialización de la matriz, cuál es el valor más grande que va a necesitar. El valor se calculará solo cuando lo necesite y no más.


El mayor beneficio es que no es a lo que estás acostumbrado. Elija un idioma como Scheme y aprenda a resolver los problemas con él, y se convertirá en un mejor programador en los idiomas que ya conoce. Es como aprender un segundo idioma humano. Usted asume que los demás son básicamente una variación suya porque no tiene nada con qué compararlos. La exposición a los demás, en particular, que no están relacionados con lo que ya sabes, es instructiva.


No piense en programación funcional en términos de una "necesidad". En cambio, piense en ello como otra técnica de programación que abrirá su mente al igual que OOP, plantillas, lenguaje ensamblador, etc. pueden haber cambiado completamente su forma de pensar cuando (si) los aprendió. En definitiva, el aprendizaje de la programación funcional lo convertirá en un mejor programador.


No tiene que ser uno u otro: usar un lenguaje como C # 3.0 le permite mezclar los mejores elementos de cada uno. OO se puede utilizar para la estructura de gran escala a nivel de clase y superior, estilo funcional para la estructura de pequeña escala a nivel de método.

El uso del estilo funcional permite escribir un código que declara su intención claramente, sin mezclarse con sentencias de flujo de control, etc. Debido a los principios como la programación libre de efectos secundarios, es mucho más fácil razonar sobre el código y verificar su corrección. .


Si aún no conoce la programación funcional, aprender le brinda más formas de resolver los problemas.

FP es una generalización simple que promueve funciones a valores de primera clase, mientras que OOP es para la estructuración a gran escala de código. Sin embargo, existe cierto solapamiento en el que los patrones de diseño de OOP se pueden representar directamente y de forma mucho más sucinta usando funciones de primera clase.

Muchos idiomas ofrecen FP y OOP, incluyendo OCaml, C # 3.0 y F #.

Saludos, Jon Harrop.


Una vez que el programa crece, el número de comandos en nuestro vocabulario se vuelve demasiado alto, lo que lo hace muy difícil de usar. Aquí es donde la programación orientada a objetos nos facilita la vida, porque nos permite organizar nuestros comandos de una mejor manera. Podemos asociar todos los comandos que involucran al cliente con alguna entidad de cliente (una clase), lo que hace que la descripción sea mucho más clara. Sin embargo, el programa sigue siendo una secuencia de comandos que especifica cómo debe proceder.

La programación funcional proporciona una forma completamente diferente de ampliar el vocabulario. No se limita a agregar nuevos comandos primitivos; también podemos agregar nuevas estructuras de control: primitivas que especifican cómo podemos juntar comandos para crear un programa. En los lenguajes imperativos, pudimos componer comandos en una secuencia o utilizando un número limitado de construcciones integradas, como bucles, pero si observa los programas típicos, aún verá muchas estructuras recurrentes; formas comunes de combinar comandos