I w zasadzie zgadzają się z odpowiedzią FrustratedWithFormsDesign za , ale poprosił także, jak uczenie się nowego paradygmatu pomaga rozwijać swoich umiejętności. Mogę podać kilka przykładów z własnego doświadczenia.
Od czasu nauki programowania funkcjonalnego jestem znacznie bardziej świadomy, z którymi pojęciami pracuję bardziej naturalnie uważanymi za „obiekty” (ogólnie tam, gdzie mutacja ma sens), a które z natury są uważane za niezmienne „wartości” (myślę, że istnieje ważne rozróżnienie , dotykając, gdzie OO ma sens, a kiedy FP ma sens, ale to tylko moja opinia).
Zauważyłem, gdzie mój kod zawiera efekty uboczne, i staram się izolować te miejsca, czyniąc więcej moich funkcji „czystymi” funkcjami. To znacznie poprawia testowalność mojego kodu OO.
Jestem bardziej świadomy cykli w mojej reprezentacji danych. (Na przykład nie sądzę, że można napisać funkcję konwersji listy połączonej na listę podwójnie połączoną w Haskell, więc zauważasz cykle znacznie więcej w tym języku). Unikanie cykli zmniejsza ilość synchronizacji musisz wykonać, aby struktury danych były wewnętrznie spójne, zmniejszając obciążenie związane z udostępnianiem tych struktur między wątkami.
Bardziej prawdopodobne jest, że będę polegać na rekurencji (rekurencyjne konstrukcje zapętlające schematu to rzeczy piękne). Dijkstra poruszył tę kwestię w uwagach na temat programowania strukturalnego - algorytmy rekurencyjne odwzorowują bardzo bezpośrednio indukcję matematyczną, co, jak sugeruje, jest jedynym sposobem intelektualnego udowodnienia poprawności naszych pętli. (Nie sugeruję, że musimy udowodnić, że nasz kod jest poprawny, ale że im łatwiej nam to zrobić, tym bardziej prawdopodobne jest, że nasz kod jest poprawny.)
Bardziej prawdopodobne jest, że użyję funkcji wyższego rzędu. Artykuł Johna Hughesa, Dlaczego programowanie funkcjonalne ma znaczenie . Podkreśla kompozycyjność uzyskaną dzięki zastosowaniu funkcjonalnych technik programowania, przy czym funkcje wyższego rzędu odgrywają ważną rolę.
Ponadto, jak poruszono w odpowiedzi Jettiego , przekonasz się, że wiele pomysłów na FP jest włączanych do nowszych języków OO. Zarówno Ruby, jak i Python zapewniają wiele funkcji wyższego rzędu, słyszałem LINQ opisany jako próba wprowadzenia obsługi rozumień monadycznych do C #, nawet C ++ ma teraz wyrażenia lambda.