Podobne pytanie zadano przed: "Does functional programming replace GoF design patterns", z wielkimi odpowiedziami.
Ekwiwalent "wzorców projektowych" jest bardzo mało precyzyjny w DF. Ogólnie, za każdym razem, gdy widzisz "wzór" w swoim kodzie, powinieneś stworzyć coś, aby pokryć wszystkie swoje zastosowania w jednolity sposób. Często będzie to funkcja wyższego rzędu.
Na przykład, następujący kod C
for (int i = 0; i < n; i++)
if (a[i] == 42)
return true;
return false;
można traktować jakiegoś podstawowego „wzorzec projektowania” - sprawdzenie, czy istnieje jakiś specjalny element na liście.Ten fragment może pojawić się wiele razy w kodzie w różnych warunkach. W DF po prostu wielokrotnie korzystasz z funkcji wyższego rzędu. To już nie jest "wzór".
Programowanie funkcjonalne ma swoje własne praktyki, ale znacznie różnią się one od "wzorców projektowych" w OOP. Obejmują one wykorzystanie polimorfizmu, listy, funkcje wyższego rzędu, niezmienność/czystość, lenistwo [nie wszystkie są niezbędne lub specyficzne dla FP] ... Zobacz także "what are core concepts of FP". Również wpisać klas (Haskell), moduły i funktory (SML), continuations, monads, zippers, finger trees, monoids, arrows, applicative functors, monad transformers wielu purely functional data structures (book) itd Functional pearls wspomniany już przez Randall Schulz, tworzą bardzo bogaty zasoby DF w najlepszym wydaniu.
Aby nauczyć się pisać kod idiomatyczny, każda książka/zasób w funkcjonalnym języku programowania będzie wystarczająca dla IMHO (na przykład: RWH i LYAH); Różnice między myśleniem imperatywnym a funkcjonalnym są tam zawsze wyjaśniane.
W językach dynamicznych link Jeffa Fostera to dobra kolekcja; here to bardzo sprytne użycie funkcji zapamiętywania w JavaScript, które można uznać za "wzorzec projektowy".
Czy jestem jedynym, który ma problem z używaniem "programowania dynamicznego" do opisywania programowania w językach dynamicznych? Termin jest już zajęty. To jak ludzie .NET używający "silnego pisania", gdy mają na myśli "statyczne pisanie". – orip
^Nie. Bardzo mi to przeszkadza. – Sneakyness