2016-04-22 11 views
0

Ich lerne Java 8 neu, ich sehe eine Definition im Zusammenhang mit der funktionalen Programmierung, die ist "Ein Programm erstellt mit nur reine Funktionen, Keine Nebenwirkungen erlaubt".Was sind Nebenwirkungen in der funktionalen Programmierung?

Einer der Nebenwirkungen ist "Ändern einer Datenstruktur an Ort und Stelle".

ich verstehe diese Zeile nicht, weil endlich einige, wo wir mit der Datenbank zum Speichern oder Abrufen oder Aktualisieren der Daten sprechen müssen.

Modifizierung der Datenbank ist nicht funktional bedeutet, wie wir mit der Datenbank in der funktionalen Programmierung sprechen werden?

+0

Suchen Sie die IO Monad. – Enigmativity

+0

Im Kontext von Java 8 nicht. Sie drücken Operationen auf eine funktionale Weise aus, wenn dies einen Vorteil hat, und greifen andernfalls auf andere Programmierstile zurück. – Holger

Antwort

1

"Ändern einer Datenstruktur an Ort und Stelle" bedeutet, dass Sie die Eingabedatenstruktur (d. H. Eine Liste) direkt bearbeiten. „Reine Funktionen“ bedeuten

  • das Ergebnis ist nur eine Funktion die es Eingang und nicht ein anderer versteckter Zustand
  • die Funktion mehrmals am selben Eingang angewandt werden kann, um das gleiche Ergebnis zu erzeugen. Es wird die Eingabe nicht ändern.

In der objektorientierten Programmierung definieren Sie das Verhalten von Objekten. Das Verhalten könnte darin bestehen, einen Lesezugriff auf den Status des Objekts, Schreibzugriff darauf oder beides bereitzustellen. Wenn Sie Operationen verschiedener Bereiche kombinieren, können Sie Nebenwirkungen verursachen.

Zum Beispiel ein Stack und es ist pop() Operation. Dies führt zu unterschiedlichen Ergebnissen bei jedem Aufruf, da der Status des Stapels geändert wird.

In der funktionalen Programmierung wenden Sie Funktionen auf unveränderliche Werte an. Funktionen repräsentieren einen Datenfluss, keine Zustandsänderung. So sind Funktionen selbst zustandslos. Und das Ergebnis einer Funktion ist entweder die ursprüngliche Eingabe oder ein anderer Wert als die Eingabe, aber niemals eine geänderte Eingabe.

OO kennt auch Funktionen, aber diese sind in keinem Fall rein, zB Sortieren: Bei nichtfunktionaler Programmierung ordnen Sie die Elemente einer Liste in der ursprünglichen Datenstruktur ("in-place") neu an. In Java ist dies das, was Collections.sort() `tut.

In der funktionalen Programmierung würden Sie die Sortierfunktion auf einen Eingabewert (eine Liste) anwenden und dadurch einen neuen Wert (eine neue Liste) mit sortierten Werten erzeugen. Die Funktion selbst hat keinen Status und der Status der Eingabe wird nicht geändert.

So zu verallgemeinern: den gleichen Eingangswert gegeben, eine Funktion der Anwendung auf diesen Wert

In Bezug auf die Datenbankoperationen den gleichen Ergebniswert erzeugt. Der Inhalt der Datenbank selbst repräsentiert einen Zustand, der die Kombination aller gespeicherten Werte, Tabellen usw. darstellt (ein "Schnappschuss"). Natürlich könnten Sie auf diese Daten eine Funktion anwenden, die neue Daten erzeugt. In der Regel speichern Sie die Ergebnisse von Operationen in der Datenbank und ändern damit den Status des gesamten Systems. Dies bedeutet jedoch nicht, dass Sie den Status der Funktion oder die Eingabedaten ändern. Durch erneutes Anwenden der Funktion werden die pure-function-Einschränkungen nicht verletzt, da Sie die Daten auf neue Eingabedaten anwenden. Wenn man jedoch das gesamte System als "Datenstruktur" betrachtet, würde dies die Einschränkung verletzen, da die Funktionsanwendung den Status der "Eingabe" ändert.

So ist das gesamte Datenbanksystem kann kaum funktionellen in Betracht gezogen werden, aber natürlich könnte man auf den Daten in einer funktionalen Weise.

Aber Java erlaubt es Ihnen, beides zu tun (OO und FP) und sogar beide Paradigmen zu mischen, so dass Sie den Ansatz wählen können, der am besten zu Ihren Bedürfnissen passt.

oder von this answer

zu zitieren Wenn Sie mehrere Bedürfnisse miteinander vermischt haben, Ihre Paradigmen mischen. Do not beschränken Sie sich nur auf die untere rechte Ecke Ihrer Toolbox.

Verwandte Themen