La programación funcional es un paradigma declarativo. Una de las fortalezas con FP es que se evitan los efectos secundarios. Se dice que para algunos problemas FP no es una buena opción.
¿Para qué problemas comunes no es una buena programación funcional?
Respuestas:
Aplicaciones de naturaleza muy dinámica. Los videojuegos son un buen ejemplo porque modelan el mundo real. Tiene mucho más sentido pensar en modificar el estado del mundo en lugar de reconstruirlo desde el estado anterior cada vez que algo cambia.
Un ejemplo concreto sería cambiar la salud de un monstruo después de recibir un disparo. Es mucho más sensato simplemente alterar su salud que reemplazarlo con un monstruo completamente nuevo que sea igual en todos los sentidos, excepto que ahora tiene menos salud. Este tipo de cambios conforman casi todo en un mundo de juegos, y hacer esto de una manera puramente funcional no es muy intuitivo. Me imagino que puede haber algunas penalizaciones de rendimiento significativas, al menos si lo estás haciendo en un lenguaje puramente funcional.
(Como nota al margen, algunos problemas en los juegos se adaptan muy bien a la programación funcional, como la IA. Un lenguaje híbrido funcional / imperativo sería una excelente opción para esos casos).
fuente
La programación incrustada en tiempo real tiene que ver con los efectos secundarios. Interactuando con io digital y analógico, temporizadores, puertos seriales y paralelos, todo lo interesante se hace llamando a funciones con efectos secundarios.
fuente
Yo diría que la programación GUI no es una buena opción para la programación funcional. Las GUI son generalmente muy dinámicas, y es mucho más fácil modelarlas / administrarlas usando el estado en lugar de usar un efecto secundario libre. Ciertamente es posible usar un lenguaje de programación funcional para GUI ... pero probablemente no sea una buena idea.
Como se señaló en otra respuesta, los juegos son a menudo más fáciles de administrar mediante el seguimiento del estado, y si bien puede escribir un juego en un lenguaje funcional, a menudo es más fácil y más eficiente hacerlo en un lenguaje "con estado" (es decir, orientado a objetos idioma).
fuente
Aplicaciones comerciales basadas en datos. La interfaz de usuario y las operaciones de datos simples no necesitan FP.
fuente
filter
,reduce
ymap
. Tirar un pocosort
,partition
,groupBy
. Después de todo, el lenguaje de programación más utilizado para escribir tales aplicaciones es Excel, que es un lenguaje funcional.No puede descartar fácilmente cualquier conjunto de problemas que no sea adecuado para la programación funcional per se.
Mucho depende del lenguaje real utilizado para la programación funcional y sus características.
Un ejemplo es el ya mencionado Erlang para sistemas embebidos en tiempo real.
La plenitud de estado tampoco es un buen criterio en contra de la programación funcional, hay varias formas exitosas implementadas en lenguajes de programación funcional para lidiar con esto.
Los efectos secundarios también se mencionan a menudo contra la programación funcional. Cada programa que no es totalmente solipsista tiene efectos secundarios. Por lo tanto, cada lenguaje FP del mundo real tiene alguna forma de lidiar con esto, solo es una cuestión de cuán elegantemente encapsular los efectos secundarios mundiales.
No hay necesidad de efectos secundarios arbitrarios como las variables globales en absoluto.
Pero hay conjuntos de problemas que hacen que sea más fácil ingresar a la programación funcional porque no tuercen tanto su forma familiar de ver el problema. Pero una vez que logras pensar funcionalmente, más y más conjuntos de problemas están abiertos a menos efectos secundarios.
Incluso cuando se programa C, siempre es una buena idea reducir los efectos secundarios arbitrarios, como las variables globales, tanto como sea posible.
fuente