Kann ich die funktionale Programmierung in meiner eigenen Sprache verwenden?

Ursprünglicher Autor: Eric Normand
  • Übersetzung
Hier ist eine Amateur-Übersetzung eines Essays von Eric Normand, einem Berater und Sprecher, der funktionale Programmierung fördert.

Ich war ziemlich frei mit Begriffen, zögerte nicht, Anglizismen wie "Funktion" zu verwenden. Ich bin verwirrt über die wörtliche Übersetzung der Programmiererbegriffe. Viel Spaß beim Lesen

Zusammenfassung: Wir beantworten die Frage direkt, analysieren jedoch die dahinter verborgenen Vorurteile.


Häufig fragen mich erfahrene Entwickler: "Was kann mir eine funktionale Programmierung bringen, die ich nicht habe? Kann ich einfach AF in meiner eigenen Sprache verwenden?" Dies ist eine großartige Frage. Ich hoffe, ich kann Ihnen eine anständige Antwort geben.


Ich verstehe die Entstehung dieses Problems vollständig. In JavaScript gibt map, filterund reduce. Java 8 hat Streams ( ich entschied mich für Anglicism anstelle des Wortes "Stream" - Kommentar des Übersetzers ). Es scheint, dass jede Sprache mehr und mehr funktionale Funktionen bekommt, inkl. unveränderliche Datenstrukturen , Funktionen erster Ordnung, Funktionszusammenstellung, 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 jeder Sprache in einem prozeduralen, objektorientierten oder logischen Stil schreiben können, können Sie in jeder Sprache in einem funktionalen Stil schreiben.


Warten Sie eine Minute. Dies ist die Antwort auf die Frage. Aber ist alles so einfach?


Fragen Sie sich: Ist es möglich, OOP in C-Sprache zu verwenden? Nach dem, was ich oben gesagt habe, lautet die Antwort ja. Darüber hinaus habe ich bereits kleine Objektsysteme für C erstellt. Warum brauche ich dann eine objektorientierte Sprache, wenn ich Objekte in C verwenden kann? Es scheint, als hätte mein Objektsystem mir alle für OOP benötigten Funktionen zur Verfügung gestellt. Aber noch eine andere Frage: Könnte ich OOP in C verwenden, ohne OOP zu kennen? Ich bezweifle es


Diese Paradigmen werden seitdem Paradigmen genannt Dies sind ganzheitliche Ansätze zur Lösung von Problemen. OOP teilt eine Aufgabe in Objekte auf, die über Nachrichten miteinander interagieren. Das FP stellt eine Aufgabe als Daten dar, die den Status des simulierten Prozesses anzeigt. Der prozedurale Ansatz beschreibt eine 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 das OP in Java verwenden können und kein Experte für das OP sind, dann behaupten Sie, dass die funktionale Programmierung kein Paradigma ist, sondern nur eine Reihe von Funktionen (unveränderliche Daten, reine Funktionen, deren Zusammensetzung usw.).


Das ist mir schon oft begegnet. Die Leute behaupten, dass sie in JavaScript in funktionalem Stil schreiben. In der Tat werden sie einfach verwendet mapund reducezusammen mit einigen reinen Funktionen . Und es gibt gute Ergebnisse, aber im Allgemeinen ist der Code verfahrenstechnisch. Sie haben das Paradigma nicht studiert, sondern nur seine Merkmale.


Der Vorteil einer Sprache, die ein Paradigma starr auferlegt, besteht darin, dass Sie lernen, mit diesem Ansatz Probleme zu lösen. 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 werden Sie geschult, um bei der Lösung von Problemen einen funktionalen Ansatz zu verwenden. Gleiches gilt für die PLO und den Verfahrensstil. Kurz gesagt, Sie trainieren auf Kosten der Tatsache, dass Sie die gewohnten Ansätze nicht verwenden können.


Lassen Sie mich eine noch kontroversere Aussage formulieren: Außerhalb der funktionellen Sprachen (Clojure, Haskell, Elm, Scala, Erlang usw.) werden nicht so viele AFs verwendet. Außer wenn Entwickler bereits mit dem funktionalen Stil vertraut sind, verwenden sie dank ihres Erfahrungsschatzes nur Teile des Paradigmas. Und sie vermissen das Wichtigste: die Möglichkeit, die Aufgabe aus einem anderen Blickwinkel zu betrachten.


Ich sage nicht, dass es unmöglich ist, AF wirklich mit JavaScript zu lernen, aber dies erfordert Selbstdisziplin und Hilfe . Die Sprache wird Sie nicht auf diesem Weg belehren. Sie müssen es selbst tun oder jemanden finden, der Ihnen helfen wird.


Fazit


Alle Paradigmen sind ausgezeichnet, weil "Ein Standpunkt entspricht 80 IQ-Punkten . " Sie können jedes Paradigma in jeder Sprache verwenden. Es ist jedoch sehr schwierig, das Paradigma zu studieren, ohne in dieses einzutauchen. Und es ist ziemlich schwer zu tauchen, ohne eine Sprache zu benutzen, die sie zwingt. Bis Sie dies tun, werden Sie die Paradigma-Funktionen verwenden, aber Probleme nicht auf eine neue Art lösen. Im Allgemeinen ist die funktionale Programmierung keine Reihe von Funktionen. Wenn Sie es lernen wollen, tauchen Sie ein.


Jetzt auch beliebt: