Grundsätzlich stimme ich der Antwort von FrustratedWithFormsDesign zu , aber Sie haben auch gefragt, wie das Erlernen des neuen Paradigmas zur Entwicklung der eigenen Fähigkeiten beiträgt. Ich kann einige Beispiele aus meiner eigenen Erfahrung nennen.
Seit ich funktionales Programmieren lerne, bin ich mir viel bewusster darüber im Klaren, mit welchen Konzepten ich natürlicher als "Objekte" (im Allgemeinen, wo Mutation Sinn macht) und welche natürlicher als unveränderliche "Werte" betrachtet werden (ich denke, es gibt einen wichtigen Unterschied) Ich möchte darauf eingehen, wo OO Sinn macht und wann FP Sinn macht, aber das ist nur meine Meinung.
Ich bemerke, wo mein Code Nebenwirkungen enthält, und ich bin vorsichtiger, diese Stellen zu isolieren, indem ich mehr von meinen Funktionen zu "reinen" Funktionen mache. Dies verbessert die Testbarkeit meines OO-Codes erheblich.
Ich bin mir der Zyklen in meiner Datendarstellung bewusster. (Ich glaube beispielsweise nicht, dass Sie in Haskell eine Funktion schreiben können, mit der eine verknüpfte Liste in eine doppelt verknüpfte Liste konvertiert werden kann. Sie bemerken also in dieser Sprache deutlich mehr Zyklen.) Durch das Vermeiden von Zyklen wird der Synchronisationsaufwand verringert Sie müssen eine Leistung erbringen, damit Ihre Datenstrukturen intern konsistent sind. Dies erleichtert die gemeinsame Nutzung dieser Strukturen zwischen Threads.
Ich verlasse mich eher auf Rekursion (die rekursiven Schleifenkonstrukte des Schemas sind etwas Schönes). Dijkstra hat in den Anmerkungen zur strukturierten Programmierung darauf hingewiesen, dass rekursive Algorithmen der mathematischen Induktion sehr direkt zugeordnet sind, was seiner Ansicht nach das einzige Mittel ist, um intellektuell zu beweisen, dass unsere Schleifen korrekt sind. (Ich schlage nicht vor, dass wir unseren Code korrekt nachweisen müssen, aber je einfacher wir es uns selbst machen, desto wahrscheinlicher ist es, dass unser Code korrekt ist.)
Ich verwende eher Funktionen höherer Ordnung. John Hughes 'Arbeit Why Functional Programming Matters . Es unterstreicht die Kompositionsfähigkeit, die Sie durch den Einsatz funktionaler Programmiertechniken erhalten, wobei Funktionen höherer Ordnung eine wichtige Rolle spielen.
Wie in Jettis Antwort angesprochen , werden Sie auch feststellen, dass viele FP-Ideen in neuere OO-Sprachen integriert werden. Ruby und Python bieten beide viele Funktionen höherer Ordnung. Ich habe gehört, dass LINQ als ein Versuch beschrieben wurde, Unterstützung für monadisches Verständnis in C # zu bringen. Sogar C ++ hat jetzt Lambda-Ausdrücke.