Hier ist eine Amateurübersetzung eines Aufsatzes von Eric Normand, einem Berater und Redner, der sich für funktionale Programmierung einsetzt.
Ich war ziemlich frei mit den Begriffen, zögerte nicht, den Engländerismus als "Feature" zu verwenden. Ich bin verwirrt von der wörtlichen Übersetzung von Programmierbegriffen. Viel Spaß beim Lesen
Zusammenfassung: Wir beantworten die Frage direkt, analysieren dann aber die dahinter verborgenen Vorurteile.
Sehr oft fragen mich erfahrene Entwickler: "Was kann mir funktionale Programmierung geben, was ich nicht habe? Kann ich FP einfach in meiner eigenen Sprache verwenden?" Dies ist eine großartige Frage, ich hoffe, ich kann eine anständige Antwort darauf geben.
Ich verstehe das Erscheinungsbild dieses Problems vollständig. JavaScript hat map
, filter
und reduce
. Java 8 hat Streams ( ich habe mich entschieden, Englisch anstelle des Wortes "Stream" zu verwenden - ca. Übersetzer ). Es scheint, dass jede Sprache immer mehr funktionale Merkmale erhält, einschließlich unveränderliche Datenstrukturen , Funktionen erster Ordnung, Zusammensetzung von Funktionen, Destrukturierung und gute Typisierung.
Und ich stimme zu: Sie können FP in jeder Sprache verwenden .
Funktionale Programmierung ist nur ein Paradigma. So wie Sie in einer beliebigen Sprache in einem prozeduralen, objektorientierten oder logischen Stil schreiben können, können Sie in einer beliebigen Sprache in einem funktionalen Stil schreiben.
Warte eine Minute. Dies ist die Antwort auf die Frage. Aber ist es so einfach?
Fragen Sie sich: Kann ich OOP in C verwenden? Nach dem, was ich oben gesagt habe, lautet die Antwort ja. Außerdem habe ich in C bereits früher kleine Objektsysteme erstellt. Aber warum brauche ich dann eine objektorientierte Sprache, wenn ich Objekte in C verwenden kann? Es fühlte sich so an, als ob mein Objektsystem mir alle für OOP erforderlichen Funktionen zur Verfügung stellte. Aber hier ist eine andere Frage: Könnte ich OOP in C verwenden, ohne OOP zu kennen? Ich bezweifle es.
Diese Paradigmen werden Paradigmen genannt, weil Dies sind ganzheitliche Ansätze zur Lösung von Problemen. OOP unterteilt die Aufgabe in Objekte, die über Nachrichten miteinander interagieren. FP stellt eine Aufgabe als Daten dar, die den Status eines simulierten Prozesses anzeigen. Der prozedurale Ansatz beschreibt die Lösung als eine Reihe klarer Schritte. Jedes Paradigma bietet einen anderen Weg, um das Problem zu lösen. Wenn Sie der Meinung sind, dass Sie FP in Java verwenden können, ohne ein Spezialist für FP zu sein, dann sagen Sie, dass funktionale Programmierung kein Paradigma ist, sondern nur eine Reihe von Funktionen (unveränderliche Daten, reine Funktionen, deren Zusammensetzung usw.).
Ich bin so oft darauf gestoßen. Die Leute behaupten, in JavaScript in funktionalem Stil zu schreiben. Tatsächlich verwenden sie nur map
und reduce
gepaart mit einer Reihe von reinen Funktionen . Und es gibt gute Ergebnisse, aber im Allgemeinen ist ihr Code prozedural. Sie untersuchten kein Paradigma, sondern nur seine Merkmale.
Der Vorteil einer Sprache, die ein Paradigma starr auferlegt, besteht darin, dass Sie lernen, diesen Ansatz zur Lösung von Problemen zu verwenden. Und je mehr er es auferlegt, desto öfter müssen Sie versuchen, das Problem im Rahmen dieses Paradigmas zu lösen. Je funktionaler Ihre Sprache ist, desto mehr üben Sie einen funktionalen Ansatz zur Lösung von Problemen. Gleiches gilt für OOP und prozeduralen Stil. Kurz gesagt, Sie trainieren, indem Sie nicht in der Lage sind, die gewohnten Ansätze zu verwenden.
Lassen Sie mich eine noch kontroversere Aussage machen: Außerhalb der funktionalen Sprachen (Clojure, Haskell, Elm, Scala, Erlang usw.) werden nicht viele FPs verwendet. Außer wenn Entwickler bereits mit dem funktionalen Stil vertraut sind, verwenden sie dank der umfangreichen Erfahrung nur Krümel dessen, was das Paradigma bietet. Und sie verpassen das Wichtigste: die Möglichkeit, die Aufgabe aus einem anderen Blickwinkel zu betrachten.
Ich sage nicht, dass es unmöglich ist, FP mit JavaScript zu lernen, aber dies erfordert Selbstdisziplin und Hilfe . Die Sprache wird Sie nicht auf diesem Weg führen. Sie müssen es selbst tun oder jemanden finden, der Ihnen hilft.
Fazit
Alle Paradigmen sind ausgezeichnet, weil "Ein Gesichtspunkt entspricht 80 IQ-Punkten . " Sie können jedes Paradigma in jeder Sprache verwenden. Es ist jedoch sehr schwierig, das Paradigma zu studieren, ohne darauf einzugehen. Und es ist ziemlich schwierig zu tauchen, ohne die Sprache zu verwenden, die es auferlegt. Bis Sie dies tun, werden Sie Funktionen des Paradigmas verwenden, aber Probleme nicht auf neue Weise lösen. Im Allgemeinen besteht die funktionale Programmierung nicht aus einer Reihe von Funktionen. Wenn Sie es lernen möchten, tauchen Sie ein.