¿En qué situaciones debería elegir usar un lenguaje de programación funcional en lugar de un lenguaje orientado a objetos más detallado como C ++, C # o Java?
Entiendo qué es la programación funcional, lo que realmente no entiendo es para qué tipo de problemas ¿es una solución perfecta?
functional-programming
language-agnostic
Alex Baranosky
fuente
fuente
Respuestas:
Los lenguajes funcionales son, en mi opinión, buenos principalmente para dos cosas: IA de juegos y cálculos matemáticos. Es bueno en la IA de juegos debido a sus agradables manipulaciones de listas (al menos en Lisp y Scheme), y para cálculos matemáticos debido a su sintaxis. Scheme, Lisp y Haskell tienen una sintaxis que hace que los cálculos matemáticos sean fáciles de leer. Lo último que tengo que añadir es que los lenguajes funcionales son lenguajes realmente divertidos. Mi curso de Scheme fue uno de los cursos con los que más me divertí.
fuente
Yo mismo investigué un poco sobre esto y pensé que podría agregar CONCURRENCIA a la lista de razones para usar un lenguaje funcional. Verá que en algún momento en el futuro cercano la velocidad del procesador no podrá aumentar usando la misma tecnología de cpu. La física de la arquitectura no lo permitirá.
Ahí es donde entra el procesamiento concurrente.
Lamentablemente, la mayoría de los lenguajes de programación orientada a objetos no pueden aprovechar varios procesadores a la vez debido a las interdependencias entre los datos.
En los lenguajes de programación puramente funcionales, la computadora puede ejecutar dos (o muchas más) funciones a la vez porque esas funciones no alteran la información de estado externa.
Aquí hay un excelente artículo sobre programación funcional que puede disfrutar.
fuente
Un amigo mío citó a uno de sus profesores universitarios diciendo algo como lo siguiente:
Mi respuesta es que FP es un enfoque completamente viable para la programación con una gama de aplicaciones tan amplia como OO. Al igual que con cualquier discusión sobre la elección del lenguaje de programación, creo que las preguntas más importantes son:
En cuanto a la primera pregunta, si está haciendo esto principalmente por el valor de aprendizaje, le sugiero que consulte a Haskell , debido a la amplia gama de materiales de apoyo (libros, artículos, comunidad activa, etc.)
En cuanto a la segunda pregunta, Haskell tiene una buena gama de bibliotecas (aunque algunas son más maduras que otras), pero Scala (un lenguaje funcional híbrido OO que se ejecuta en la JVM) tiene las ventajas de que puede realizar una transición más gradual al estilo funcional. y dispone de la gama completa de bibliotecas accesibles a Java.
fuente
Prácticamente todo lo que puedes hacer en PP se puede hacer en FP, y lo mismo a la inversa. Es simplemente otra forma de codificar algo: otra perspectiva del problema y una forma diferente de resolverlo.
Sin embargo, debido a que no mucha gente usa FP, el problema es más sobre la falta de buenas bibliotecas, portabilidad / mantenibilidad (ya que el mantenedor tiene más posibilidades de entender algo escrito en C ++ que Scheme) y la falta de documentación y comunidad. Sé que HAY algunos documentos, sin embargo, compárelo con C ++, C # o Java y comprenderá lo que quiero decir.
Sin embargo, si realmente desea hacer FP, puede usar este estilo incluso en C ++ y C #. Por supuesto, no será un 100% FP si usa la biblioteca estándar. Desafortunadamente, no creo que C # esté optimizado para usarse con programación funcional y probablemente creará muchos problemas de rendimiento.
Esta es una publicación más subjetiva, lo que pienso sobre FP. No es una declaración rigurosa.
fuente
Los lenguajes funcionales son buenos en muchas situaciones. Depende de las bibliotecas de un lenguaje funcional particular.
¿Cómo respondería a la pregunta "Cuándo utilizar un lenguaje de programación orientado a objetos"?
fuente
Aunque esta es una pregunta bastante subjetiva, me gustaría agregar que los lenguajes funcionales se usan mucho para analizar lenguajes específicos de dominio ; la naturaleza funcional se presta bien para analizar gramáticas.
fuente
Por lo que he visto, es más una cuestión de gusto que de funcionalidad (sin juego de palabras). Realmente no hay nada en ninguno de los estilos de lenguaje que lo haga inherentemente mejor o peor en tareas específicas.
fuente
En general, use el lenguaje en el que sea más fácil expresar la solución a un problema. Para la programación funcional, esto es cuando la solución a un problema se expresa fácilmente en términos de funciones , de ahí el nombre. Generalmente es bueno para operaciones matemáticas, IA, coincidencia de patrones; en general, cualquier cosa que se pueda dividir en un conjunto de reglas que se deben aplicar para obtener una respuesta. Solo puede determinar realmente el "mejor" lenguaje a utilizar después de haber analizado suficientemente su problema. Aquí es donde el pseudocódigo resulta útil. Si se encuentra escribiendo un pseudocódigo que se parece a FP, utilice FP.
Por supuesto, todos los lenguajes de programación completos son funcionalmente equivalentes, por lo que realmente no importa cuál elija en términos de los problemas que pueda resolver. Los principales efectos serán en términos de eficiencia y precisión de codificación y facilidad de mantenimiento.
Tenga en cuenta también que es posible imitar FP dentro de los lenguajes OO a través de API inteligentemente diseñadas. Por ejemplo, he visto numerosas bibliotecas de Java (JMock es un ejemplo) que usan el encadenamiento de métodos para simular un FP DSL. Luego verá construcciones como:
logger.expects(once()).method("error") .with( and(stringContains(action),stringContains(cause)) );
Básicamente, esto crea una función que se evalúa para determinar si alguna secuencia de llamada en un objeto simulado es correcta. (ejemplo robado de http://www.jmock.org/yoga.html )
Otra sintaxis similar a FP en lenguajes OO es el uso de cierres, como en Ruby.
fuente