Una domanda correlata è stata posta prima: "Does functional programming replace GoF design patterns", con grandi risposte.
L'equivalente di "modelli di progettazione" è molto vago in FP. In generale, ogni volta che vedi un "pattern" nel tuo codice dovresti creare qualcosa per coprire tutti i suoi usi in modo uniforme. Spesso sarà una funzione di ordine superiore.
Ad esempio, il seguente codice C
for (int i = 0; i < n; i++)
if (a[i] == 42)
return true;
return false;
può essere pensato un po 'di base "modello di progettazione" - controllare se c'è qualche elemento speciale nella lista.Questo frammento potrebbe apparire molte volte nel codice con condizioni diverse. In FP, si usa semplicemente una funzione di ordine superiore più volte. Non è più un "modello".
La programmazione funzionale ha le sue pratiche, ma sono molto diverse da "schemi di progettazione" in OOP. Includono l'uso di polimorfismo, elenchi, funzioni di ordine superiore, immutabilità/purezza, pigrizia [non tutti sono essenziali o specifici per FP] ... Vedi anche "what are core concepts of FP". Inoltre, digitare classi (Haskell), moduli e funtori (OCaml), continuations, monads, zippers, finger trees, monoids, arrows, applicative functors, monad transformers, molti purely functional data structures (book) ecc Functional pearls, già menzionati da Randall Schulz, formare un molto ricco risorsa di FP al suo meglio.
Per apprendere come scrivere codice idiomatico, qualsiasi libro/risorsa su un linguaggio di programmazione funzionale sarà sufficiente per IMHO (ad esempio, RWH e LYAH); le differenze tra il pensiero imperativo e funzionale sono sempre spiegate lì.
In lingue dinamiche, il collegamento di Jeff Foster è una buona raccolta; here è un uso molto intelligente della memoizzazione in JavaScript che potrebbe essere considerato un "modello di progettazione".
Sono l'unico che ha un problema con l'utilizzo di "Programmazione dinamica" per descrivere la programmazione in lingue dinamiche? Il termine è già preso. È come se le persone .NET usassero "caratteri forti" quando significano "tipizzazione statica". – orip
^No. Mi disturba anche molto. – Sneakyness