¿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?
¿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?
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.
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.
Por qué es importante la programación funcional
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
Resumen
A medida que el software se vuelve cada vez más complejo, es cada vez más importante estructurarlo bien. El software bien estructurado es fácil de escribir y depurar, y proporciona una colección de módulos que se pueden reutilizar para reducir los costos de programación futuros.
En este artículo mostramos que dos características de los lenguajes funcionales en particular, las funciones de orden superior y la evaluación perezosa, pueden contribuir significativamente a la modularidad. Como ejemplos, manipulamos listas y árboles, programamos varios algoritmos numéricos e implementamos la heurística alfa-beta (un algoritmo de Inteligencia Artificial utilizado en programas de juegos). Concluimos que dado que la modularidad es la clave para una programación exitosa, la programación funcional ofrece importantes ventajas para el desarrollo de software.
Por tanto, un buen punto de partida sería intentar comprender algunas cosas que no son posibles en lenguajes imperativos pero sí posibles en 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 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.
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. .
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.
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
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.
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.