it-swarm-es.com

¿Dónde están todos los patrones de diseño de programación funcional?

La literatura de programación OO está llena de patrones de diseño. La mayoría de los libros sobre programación orientada a objetos dedican uno o dos capítulos al diseño de patrones como fábricas y decoradores. Entonces, ¿cuáles son los patrones equivalentes en lenguajes funcionales y por qué nadie ha escrito aún un libro sobre ellos? ¿Hay algo especial sobre los lenguajes funcionales que obvia la necesidad de patrones de diseño?

76
davidk01

OO y la programación funcional son dos paradigmas de programación muy diferentes, y los patrones de diseño (DP) son una parte importante de OO diseño y programación. DP no tiene ese papel en la programación funcional.

Incluso se podría decir que los DP no son necesarios en la programación funcional: no hay picazón para la cual DP sea la cura.

52
Maglob

Jeremy Gibbons está escribiendo el libro. Hasta que esté terminado, puede leer su blog, Patrones en programación funcional . Recomienda leer sus publicaciones de la más antigua a la más reciente.

Examine su publicaciones también. Cubre los patrones de Gang of Four en Patrones de diseño como programas genéricos de tipo de datos de orden superior y describe los patrones de programación con recursivo ecuaciones en Programación de Origami (se pliega y se despliega).

68
Corbin March

El hecho simple es que muchos OO Patrones se considerarían modismos en lenguajes funcionales (especialmente los patrones originales de GoF). Por ejemplo, el patrón Iterator (incorporado en lenguajes como C # ahora) simplemente no es t necesario en un LISP o ML que tiene operadores de secuencia.

Muchos de los patrones que utilizamos en los sistemas O-O están ahí para ayudarnos a eliminar los "elementos no esenciales" para que podamos centrarnos en la codificación de objetos. En otras palabras, los patrones son soluciones a las partes no interesantes de la aplicación. Deberíamos aprovechar los patrones para abordar las necesidades comunes que se han resuelto antes (como los patrones en Fowlers Patterns of Enterprise Application Architecture para tratar cosas como la transmisión de bases de datos, o xUnit Patterns para aumentar las pruebas unitarias) para que podamos centrarnos en agregar valor comercial para la aplicación.

Estoy seguro de que más allá de los detalles de los patrones GoF, hay patrones de diseño que también serán aplicables a la programación funcional. El caso es que O-O es el paradigma dominante. Escribir un libro de patrones que esté dirigido a desarrolladores funcionales ... bueno, francamente no recibirá la aprobación de un editor. A eso se reduce todo. No hay suficiente mercado para los Patrones Funcionales para tener un número significativo de libros dedicados al tema.

13
Michael Brown

Una buena charla (~ 45 min) sobre este tema por Stuart Sierra:

http://www.infoq.com/presentations/Clojure-Design-Patterns

No necesariamente vinculante y autoritario, pero reconocí varios de sus ejemplos de mi propia experiencia usando FP para el análisis de datos.

Ejemplos escritos en Clojure, pero probablemente aplicables a cualquier lenguaje FP. Los nombres que da a los patrones que cubre son:

  • Estado/evento
  • Consecuencias
  • Acumulador
  • Reducir/combinar
  • Expansión recursiva
  • Tubería
  • Envoltura
  • Simbólico
  • Observador
  • Estrategia
11
Aaron Johnson

Si está realmente interesado en aprender los patrones de diseño, no busque más que Haskell. Si te tomas el tiempo para aprende el idioma de la manera difícil te encontrarás y te sentirás cómodo con la mayoría de los patrones fundamentales: están incorporados al idioma.

No te saltes las mónadas. Hay un montón de explicaciones de largo aliento por ahí y toma algo de tiempo para que las ideas se asimilen, pero si sigues desconectando, eventualmente te sorprenderá y te sorprenderá cuántos patrones de diseño pueden ser construir sobre esta abstracción/interfaz.

Una vez que hayas asimilado a Haskell, tendrás suficiente del FP arsenal a tu disposición para ser peligroso. El punto es, sigue hasta que lo obtengas. sin atajos.

6
Mario T. Lanza