¿Cuáles cree que son los beneficios de la programación funcional? ¿Y cómo se aplican a los programadores de hoy?
¿Cuáles son las mayores diferencias entre la programación funcional y la programación orientada a objetos?
functional-programming
Rayne
fuente
fuente
Respuestas:
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 en 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 todos los elementos."
La programación funcional mueve ideas de programación más básicas al compilador, ideas como listas por 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 iteradora para que sea 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 ocupa 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).
También se pueden ver algunos beneficios de rendimiento en el contexto de un solo procesador, dependiendo de la forma en que esté escrito 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". Una matriz de este tipo 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 la inicialización de la matriz, cuál es el valor más grande que necesitará. El valor se calculará solo cuando lo necesite y no más.
fuente
El mayor beneficio es que no es lo que estás acostumbrado. Elija un lenguaje como Scheme y aprenda a resolver problemas con él, y se convertirá en un mejor programador en los idiomas que ya conoce. Es como aprender un segundo idioma humano. Asumes que los demás son básicamente una variación por tu cuenta porque no tienes nada con qué compararlos. La exposición a otros, en particular a aquellos que no están relacionados con lo que ya sabe, es instructiva.
fuente
Por qué es importante la programación funcional
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
fuente
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 diferentes paradigmas de programación no es hacer posibles cosas que antes no eran posibles, sino facilitar las cosas que antes eran difíciles.
La programación funcional tiene como objetivo permitirle escribir más fácilmente programas que sean concisos, libres de errores y paralelizables.
fuente
No tiene por qué ser uno u otro: usar un lenguaje como C # 3.0 te permite mezclar los mejores elementos de cada uno. OO se puede utilizar para la estructura a gran escala a nivel de clase y superior, estilo funcional para la estructura a pequeña escala a nivel de método.
El uso del estilo funcional permite que se escriba código que declare su intención claramente, sin confundirse con declaraciones 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. .
fuente
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 aumento del hardware de múltiples núcleos, esto es de suma importancia.
La programación funcional también aumenta la modularidad; a menudo puede ver métodos / funciones en imperativo que son demasiado largos; casi nunca verá una función de más de un par de líneas de largo. Y como todo está desacoplado, la reutilización ha mejorado mucho y la prueba unitaria es muy, muy sencilla.
fuente
Una vez que el programa crece, el número de comandos en nuestro vocabulario se vuelve demasiado alto, lo que dificulta mucho su uso. Aquí es donde la programación orientada a objetos nos hace la vida más fácil, porque nos permite organizar mejor nuestros comandos. Podemos asociar todos los comandos que involucran al cliente con alguna entidad del 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 especifican 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 unir comandos para crear un programa. En lenguajes imperativos, pudimos componer comandos en una secuencia o usando un número limitado de construcciones integradas como bucles, pero si observa programas típicos, aún verá muchas estructuras recurrentes; formas comunes de combinar comandos
fuente
No piense en la programación funcional en términos de una "necesidad". En su lugar, piense en ello como otra técnica de programación que le abrirá la mente, ya que la programación orientada a objetos, las plantillas, el lenguaje ensamblador, etc. pueden haber cambiado completamente su forma de pensar cuando (si) los aprendió. En última instancia, aprender programación funcional lo convertirá en un mejor programador.
fuente
Si aún no conoce la programación funcional, aprenderla le brinda más formas de resolver problemas.
FP es una generalización simple que promueve funciones a valores de primera clase, mientras que OOP es para la estructuración de código a gran escala. Sin embargo, existe cierta superposición, donde los patrones de diseño de POO se pueden representar directamente y de manera mucho más sucinta utilizando funciones de primera clase.
Muchos lenguajes proporcionan FP y OOP, incluidos OCaml, C # 3.0 y F #.
Saludos, Jon Harrop.
fuente