7

¿Qué técnicas o paradigmas normalmente asociados con los lenguajes funcionales se pueden utilizar de manera productiva también en los idiomas imperativos?¿Qué técnicas de lenguaje funcional se pueden usar en idiomas imperativos?

por ejemplo:

  • recursividad puede ser problemático en idiomas sin optimización de llamada, lo que limita su uso a un conjunto limitado de casos, por lo que es de utilidad limitada
  • Mapa y el filtro han encontrado su camino en lenguajes no funcionales, a pesar de que tienen un tipo de sensación funcional para ellos

Realmente me gusta no tener que preocuparme por el estado en los lenguajes funcionales. Si fuera particularmente obstinado, podría escribir programas C sin modificar variables, solo encapsulando mi estado en variables pasadas a funciones y en valores devueltos por funciones.

Aunque las funciones no son valores de primera clase, puedo envolver una en un objeto en Java say, y pasar eso a otro método. Al igual que la programación funcional, simplemente menos divertido.

Entonces, para los veteranos de la programación funcional, cuando programe en lenguajes imperativos, ¿qué ideas de FP ha aplicado con éxito?

+2

Motivación: Me estoy enamorando de Haskell. Me voy a casar con Haskell y tendré a sus bebés. –

+1

Pensé que Haskell era un tipo. – MichaelGG

+2

La la la la la No estoy escuchando. –

Respuesta

11

¿Casi todos ellos?

Si entiende los idiomas funcionales, puede escribir programas imperativos que estén "informados" por un estilo funcional. Eso lo alejará de los efectos secundarios, y hacia programas en los que leer el texto del programa en cualquier punto en particular es suficiente para que realmente sepa cuál es el significado del programa en ese punto.

De vuelta en el amanecer del tiempo solíamos preocuparnos por "acoplamiento" y "cohesión". Aprender un FP lo llevará a escribir sistemas con acoplamiento óptimo (mínimo) y alta cohesión.

3

El hecho de no tener funciones de primera clase realmente pone un freno a la escritura de programas funcionales, pero hay algunas cosas que puede hacer que no los requieren. La primera es evitar el estado mutable: intente que la mayoría o todas sus clases devuelvan nuevos objetos que representen el estado modificado en lugar de realizar el cambio internamente. Por ejemplo, si estaba escribiendo una lista vinculada con una operación add, le gustaría devolver la nueva lista vinculada desde add en lugar de modificar el objeto.

Si bien esto puede hacer que sus programas sean menos eficientes (debido al mayor número de objetos creados y destruidos) obtendrá la capacidad de depurar el programa más fácilmente porque el estado y operación de los objetos se vuelve más predecible, no Mencione la capacidad de anidar las llamadas de función más profundamente porque tienen entradas y salidas de estado.

6

Estas son las cosas que se interponen en el camino de hacer FP en un idioma que no sea FP:

  • Si el idioma no soporta lambda/cierres, y no tiene nada de azúcar sintáctica de fácilmente lo piratean, estás muerto en el agua. No llamas al mapa/filtro sin cierres.
  • Si el lenguaje está estático y no admite genéricos, está muerto en el agua. Todas las buenas cosas FP utilizan genericity.
  • Si el idioma no es compatible con cola-recursión, se ve obstaculizado. Puede escribir implementaciones de, p. 'mapa' iterativamente; también a menudo sus datos pueden no ser demasiado grandes y la recursión estará bien.
  • Si el idioma no es compatible con los tipos de datos algebraicos y la coincidencia de patrones, se verá un poco impedido. Es molesto no tenerlos una vez que los has probado.
  • Si el lenguaje no puede expresar clases de tipo, bueno, bueno ... se las arreglará, pero maldita sea si eso no es solo la característica más asombrosa, pero Haskell es el único lenguaje remotamente popular con buen soporte.
+0

Esta es la respuesta correcta, no la aceptada. –

3

He utilizado con éxito funciones de orden superior mucho, especialmente el tipo que se transfiere en lugar del tipo que se devuelve. El tipo que se devuelve puede ser un poco tedioso, pero se puede simular.

Todo tipo de estructuras de datos aplicativos y funciones recursivas funcionan bien en lenguajes imperativos.

Las cosas que más extraño:

  • Casi no hay lenguajes imperativos garantizan para optimizar cada llamada cola.

  • No conozco un lenguaje imperativo que admita el análisis de casos mediante la coincidencia de patrones.

Cuestiones relacionadas