Was ist funktionale Programmierung? Anleitung mit Beispiel
Was ist funktionale Programmierung?
Funktionale Programmierung (auch FP genannt) ist eine Denkweise über die Softwarekonstruktion durch die Erstellung reiner Funktionen. Dabei werden Konzepte gemeinsamer Zustände und veränderlicher Daten vermieden, die in der objektorientierten Programmierung zu finden sind.
Funktionale Sprachen konzentrieren sich eher auf Ausdrücke und Deklarationen als auf die Ausführung von Anweisungen. Daher hängt die Wertausgabe in FP im Gegensatz zu anderen Prozeduren, die von einem lokalen oder globalen Zustand abhängen, nur von den an die Funktion übergebenen Argumenten ab.
Merkmale der funktionalen Programmierung
- Die Methode der funktionalen Programmierung konzentriert sich auf Ergebnisse, nicht auf den Prozess
- Der Schwerpunkt liegt auf dem, was berechnet werden soll
- Daten sind unveränderlich
- Funktionale Programmierung Zerlegen Sie das Problem in „Funktionen“.
- Es basiert auf dem Konzept mathematischer Funktionen, die bedingte Ausdrücke und Rekursion verwenden, um die Berechnung durchzuführen
- Iterationen wie Schleifenanweisungen und bedingte Anweisungen wie If-Else werden nicht unterstützt
Geschichte der funktionalen Programmierung
- Die Grundlage der funktionalen Programmierung ist die Lambda-Rechnung. Sie wurde in den 1930er Jahren für die funktionale Anwendung, Definition und Rekursion entwickelt.
- LISP war die erste funktionale Programmiersprache. McCarthy hat es 1960 entworfen
- In den späten 70er Jahren definierten Forscher der Universität Edinburgh die ML (Meta Language)
- In den frühen 80er Jahren fügte die Hope-Sprache algebraische Datentypen für Rekursion und Gleichungsschlussfolgerung hinzu
- Im Jahr 2004 Innovation der funktionalen Sprache „Scala“.
Funktionale Programmiersprachen
Das Ziel jeder FP-Sprache besteht darin, die mathematischen Funktionen nachzuahmen. Der grundlegende Berechnungsprozess unterscheidet sich jedoch in der funktionalen Programmierung.
Hier sind einige der bekanntesten funktionalen Programmiersprachen:
- Haskell
- SML
- Clojure
- Scala
- erlang
- Clean
- F#
- ML/OCaml Lisp / Schema
- XSLT
- SQL
- Mathematica
Grundlegende funktionale Programmierterminologie und Concepts
Unveränderliche Daten
Unveränderliche Daten bedeuten, dass Sie problemlos in der Lage sein sollten, Datenstrukturen zu erstellen, anstatt bereits vorhandene zu ändern.
Referenzielle Transparenz
Funktionale Programme sollten Operationen so ausführen, als ob sie zum ersten Mal ausgeführt würden. So wissen Sie, was während der Ausführung des Programms möglicherweise passiert ist oder nicht, und welche Nebenwirkungen es hat. In der FP-Terminologie wird dies als referenzielle Transparenz bezeichnet.
Modularität
Modularer Aufbau erhöht die Produktivität. Kleine Module können schnell codiert werden und haben eine größere Chance auf Wiederverwendung, was sicherlich zu einer schnelleren Entwicklung von Programmen führt. Darüber hinaus können die Module separat getestet werden, was Ihnen hilft, den Zeitaufwand für Unit-Tests und Debugging zu reduzieren.
Wartbarkeit
Wartbarkeit ist ein einfacher Begriff, der bedeutet, dass die FP-Programmierung einfacher zu warten ist, da Sie sich keine Sorgen machen müssen, dass versehentlich etwas außerhalb der gegebenen Funktion geändert wird.
Erstklassige Funktion
„Erstklassige Funktion“ ist eine Definition, die Programmiersprachenentitäten zugeschrieben wird, deren Verwendung keiner Einschränkung unterliegt. Daher können erstklassige Funktionen überall im Programm erscheinen.
Schließung
Der Abschluss ist eine innere Funktion, die auf Variablen übergeordneter Funktionen zugreifen kann, auch nachdem die übergeordnete Funktion ausgeführt wurde.
Funktionen höherer Ordnung
Funktionen höherer Ordnung nehmen entweder andere Funktionen als Argumente entgegen oder geben sie als Ergebnisse zurück.
Funktionen höherer Ordnung ermöglichen Teilanwendungen oder Currying. Diese Technik wendet eine Funktion nacheinander auf ihre Argumente an, da jede Anwendung eine neue Funktion zurückgibt, die das nächste Argument akzeptiert.
Reine Funktion
Eine „reine Funktion“ ist eine Funktion, deren Eingaben als Eingaben deklariert werden und keine davon ausgeblendet werden sollte. Die Ausgänge werden auch als Ausgänge deklariert.
Reine Funktionen wirken auf ihre Parameter. Es ist nicht effizient, wenn nichts zurückgegeben wird. Darüber hinaus bietet es für die angegebenen Parameter die gleiche Ausgabe
Ejemplo:
Function Pure(a,b) { return a+b; }
Unreine Funktionen
Unrein funktioniert genau das Gegenteil von rein. Sie haben versteckte Ein- oder Ausgänge; es wird unrein genannt. Unreine Funktionen können nicht isoliert verwendet oder getestet werden, da sie Abhängigkeiten aufweisen.
Beispiel
int z; function notPure(){ z = z+10; }
Funktionszusammensetzung
Bei der Funktionskomposition werden zwei oder mehr Funktionen zu einer neuen kombiniert.
Gemeinsame Staaten
Shared States ist ein wichtiges Konzept in der OOP-Programmierung. Im Grunde geht es darum, Objekten Eigenschaften hinzuzufügen. Wenn es sich bei einer Festplatte beispielsweise um ein Objekt handelt, können Speicherkapazität und Festplattengröße als Eigenschaften hinzugefügt werden.
Side Effects
Nebenwirkungen sind alle Zustandsänderungen, die außerhalb einer aufgerufenen Funktion auftreten. Das größte Ziel jeder FP-Programmiersprache besteht darin, Nebenwirkungen zu minimieren, indem sie vom Rest des Softwarecodes getrennt werden. Bei der FP-Programmierung ist es wichtig, Nebenwirkungen aus der restlichen Programmierlogik zu beseitigen.
Die Vorteile der funktionalen Programmierung
- Ermöglicht Ihnen, verwirrende Probleme und Fehler im Code zu vermeiden
- Einfacheres Testen und Ausführen von Unit-Tests und Debuggen von FP-Code.
- Parallelverarbeitung und Parallelität
- Hot-Code-Bereitstellung und Fehlertoleranz
- Bietet eine bessere Modularität mit einem kürzeren Code
- Erhöhte Produktivität des Entwicklers
- Unterstützt verschachtelte Funktionen
- Funktionale Konstrukte wie Lazy Map & Lists usw.
- Ermöglicht die effektive Nutzung der Lambda-Kalküle
Einschränkungen der funktionalen Programmierung
- Das funktionale Programmierparadigma ist nicht einfach und daher für Anfänger schwer zu verstehen
- Schwer zu warten, da sich während der Codierung viele Objekte entwickeln
- Erfordert viel Spott und umfangreiche Umgebungseinstellungen
- Die Wiederverwendung ist sehr kompliziert und erfordert eine ständige Umgestaltung
- Objekte stellen das Problem möglicherweise nicht richtig dar
Funktionale Programmierung vs. objektorientierte Programmierung
Funktionale Programmierung | OOP |
---|---|
FP verwendet unveränderliche Daten. | OOP verwendet veränderliche Daten. |
Folgt dem auf deklarativer Programmierung basierenden Modell. | Folgt dem imperativen Programmiermodell. |
Der Schwerpunkt liegt auf: „Was Sie tun. im Programm.“ | Der Schwerpunkt liegt auf „Wie Sie Ihre Programmierung durchführen“. |
Unterstützt parallele Programmierung. | Keine Unterstützung für parallele Programmierung. |
Seine Funktionen haben keine Nebenwirkungen. | Die Methode kann viele Nebenwirkungen haben. |
Die Flusskontrolle wird mithilfe von Funktionsaufrufen und Funktionsaufrufen mit Rekursion durchgeführt. | Der Flusskontrollprozess wird mithilfe von Schleifen und bedingten Anweisungen durchgeführt. |
Die Ausführungsreihenfolge der Anweisungen ist nicht sehr wichtig. | Die Ausführungsreihenfolge der Anweisungen ist wichtig. |
Unterstützt sowohl „Abstraktion statt Daten“ als auch „Abstraktion statt Verhalten“. | Unterstützt nur „Abstraktion über Daten“. |
Schlussfolgerung
- Funktionale Programmierung oder FP ist eine Denkweise über die Softwarekonstruktion, die auf einigen grundlegenden Definitionsprinzipien basiert
- Bei den Konzepten der funktionalen Programmierung stehen die Ergebnisse und nicht der Prozess im Mittelpunkt.
- Das Ziel jeder FP-Sprache besteht darin, die mathematischen Funktionen nachzuahmen
- Einige der bekanntesten funktionalen Programmiersprachen: 1) Haskell 2) SM 3) Clojure 4) Scala 5) Erlang 6) Clean
- Eine „reine Funktion“ ist eine Funktion, deren Eingaben als Eingaben deklariert werden und keine davon ausgeblendet werden sollte. Die Ausgänge werden auch als Ausgänge deklariert.
- Unveränderliche Daten bedeuten, dass Sie problemlos in der Lage sein sollten, Datenstrukturen zu erstellen, anstatt bereits vorhandene zu ändern
- Ermöglicht Ihnen, verwirrende Probleme und Fehler im Code zu vermeiden
- Funktionscode ist nicht einfach und daher für Anfänger schwer zu verstehen
- FP verwendet unveränderliche Daten, während OOP veränderbare Daten verwendet