Die Arbeit mit reinen Funktionen kann viel weniger stressig sein, da Sie sie einfach testen und mit mehr Vertrauen über sie nachdenken können.

Reine Funktionen sind Funktionen, die keine Seiteneffekte erzeugen und, wenn sie mit den gleichen Eingabeparametern aufgerufen werden, immer die gleiche Ausgabe zurückgeben.

Sie können reine Funktionen verwenden, um sicherzustellen, dass Ihr Code sauber, wartbar und testbar ist. Diese Funktionen sind ideal für diese Aufgaben, da sie vorhersagbar sind und externe Zustände nicht verändern.

Sie sind auch einfacher zu debuggen, was sie bei der Entwicklung komplexer Softwaresysteme hilfreich macht. Hier lernen Sie reine Funktionen in JavaScript, ihre Eigenschaften und ihre Vorteile kennen.

Eigenschaften einer reinen Funktion

Für eine Funktion Um „rein“ zu sein, muss es einige Anforderungen erfüllen.

Konstanter Rückgabewert

Eine reine Funktion sollte bei gleicher Eingabe immer den gleichen Wert zurückgeben, unabhängig davon, wie oft sie aufgerufen wird.

Betrachten Sie zum Beispiel die folgende Funktion:

instagram viewer
Funktionmultiplizieren(ein, b) {
zurückkehren ein*b;
}

Der multiplizieren Die Funktion im obigen Beispiel gibt immer das Produkt ihrer beiden Argumente zurück. Bei gleichen Argumenten hat es einen konstanten Rückgabewert.

Wenn Sie diese Funktion mehrmals mit denselben Argumenten aufrufen, erhalten Sie jedes Mal dieselbe Ausgabe. Zum Beispiel:

multiplizieren(2, 3); // gibt 6 zurück
multiplizieren(2, 3); // gibt 6 zurück
multiplizieren(2, 3); // gibt 6 zurück

Betrachten Sie alternativ das folgende Beispiel:

FunktionmultiplizierenZufallszahl(Anzahl) {
zurückkehren Zahl * Mathematik.Boden(Mathematik.willkürlich() * 10);
}

multiplizierenZufallszahl(5); // Unvorhersehbare Ergebnisse
multiplizierenZufallszahl(5); // Unvorhersehbare Ergebnisse
multiplizierenZufallszahl(5); // Unvorhersehbare Ergebnisse

Der multiplizierenZufallszahl Die obige Funktion gibt bei jedem Aufruf unterschiedliche Ergebnisse zurück, wodurch sie unrein wird. Die Ergebnisse dieser Funktion sind unvorhersehbar, daher ist das Testen von Komponenten, die darauf angewiesen sind, schwierig.

Keine Nebenwirkungen

Eine reine Funktion darf keine Seiteneffekte erzeugen. Ein Nebeneffekt bezieht sich auf jede Änderung des Zustands oder Verhaltens außerhalb des Bereichs der Funktion, wie z. B. das Ändern globaler Variablen, Konsolenausgaben, Netzwerkanforderungen oder DOM-Manipulationen.

Wenn eine reine Funktion eine Nebenwirkung hat, ist sie nicht mehr rein, weil sie den externen Zustand beeinflusst und gegen das Prinzip verstößt, keine beobachtbaren Nebenwirkungen zu haben. Daher vermeiden reine Funktionen Nebeneffekte, um sicherzustellen, dass sie den Zustand des Programms nicht verändern.

Betrachten Sie zum Beispiel das folgende Beispiel:

lassen zählen = 0;

FunktionZuwachs() {
zählen++;
Konsole.log (Zählung);
}

Zuwachs(); // Protokolle 1
Zuwachs(); // Protokolle 2
Zuwachs(); // Protokolle 3

Der Zuwachs Die Funktion hat in diesem Beispiel den Nebeneffekt, dass sie die ändert zählen Variable außerhalb ihres Gültigkeitsbereichs. Es meldet sich auch bei der Konsole an.

Diese Funktion ist nicht rein, da sie einen Nebeneffekt hat, der es schwieriger machen kann, ihre Ausgabe vorherzusagen und isoliert zu testen. Um es rein zu machen, können Sie es modifizieren, um es aufzunehmen zählen Variable als Argument und geben den inkrementierten Wert zurück, ohne einen externen Zustand zu ändern.

So:

FunktionZuwachs(zählen) {
zurückkehren zählen + 1;
}

Zuwachs(1); // gibt 2 zurück
Zuwachs(1); // gibt 2 zurück
Zuwachs(1); // gibt 2 zurück

Die Fassung der Zuwachs Die Funktion im obigen Beispiel hat keine Nebeneffekte, da sie keine externen Variablen ändert oder einen Wert protokolliert. Darüber hinaus gibt es unabhängig davon, wie oft Sie es aufrufen, denselben Wert für dieselbe Eingabe zurück. Es handelt sich also um eine reine Funktion.

Andere Eigenschaften

Abgesehen davon, dass Sie einen konstanten Rückgabewert haben und keine Nebenwirkungen hervorrufen, sollten Sie sich an die folgenden Regeln halten, wenn Sie es sind Erstellen einer JavaScript-Funktion dass du rein sein willst:

  • Ihre Funktion darf keines ihrer Argumente ändern. Wenn eine Operation eine Mutation erfordert, erstellen Sie stattdessen eine Kopie des Arguments und mutieren Sie die Kopie.
  • Ihre Funktion muss immer einen Rückgabewert haben. Wenn Ihre Funktion keinen Rückgabewert oder Nebenwirkungen hat, kann sie nichts tun!
  • Ihre Funktion darf nicht von einem äußeren Zustand abhängen.

Vorteile reiner Funktionen

Reine Funktionen haben bestimmte Vorteile gegenüber unreinen Funktionen, von denen einige die folgenden beinhalten.

Testbarkeit

Reine Funktionen sind einfach zu testen, da ihr Eingabe-/Ausgabeverhalten wohldefiniert ist. Außerdem hängen reine Funktionen nicht von äußeren Zuständen oder Nebeneffekten ab. Daher können Sie sie isoliert testen, ohne sich Gedanken über Abhängigkeiten oder Wechselwirkungen mit anderen Teilen des Programms machen zu müssen.

Im Gegensatz dazu kann das Testen unreiner Funktionen, die vom externen Zustand abhängen oder Nebeneffekte erzeugen, eine größere Herausforderung darstellen, da ihr Verhalten vom Zustand des Programms oder anderen externen Faktoren abhängen kann. Dies kann es schwieriger machen, umfassende Testfälle zu erstellen und sicherzustellen, dass sich die Funktion in allen Szenarien korrekt verhält.

Auswendiglernen

Da reine Funktionen immer die gleiche Ausgabe für die gleiche Eingabe und keine Seiteneffekte erzeugen, können Sie sie sich leicht merken.

Indem Sie sich auf diese Eigenschaften verlassen und die Memoisierung verwenden, können Sie das Ergebnis eines reinen Funktionsaufrufs für eine bestimmte Eingabe zwischenspeichern. Ihre Funktion kann dann das zwischengespeicherte Ergebnis zurückgeben, wenn sie das nächste Mal mit derselben Eingabe aufgerufen wird.

Auswendiglernen reiner Funktionen kann die Leistung eines Programms verbessern, insbesondere bei teuren Berechnungen, die wiederholt dieselbe Eingabe verarbeiten, ohne sich Gedanken über eine Beeinträchtigung des Programmzustands machen zu müssen.

Im Gegensatz dazu können unreine Funktionen je nach Zustand des Programms oder externen Faktoren für die gleiche Eingabe unterschiedliche Ergebnisse liefern. Dies erschwert das Auswendiglernen, da das zwischengespeicherte Ergebnis möglicherweise nicht mehr gültig ist, wenn sich die Abhängigkeiten der Funktion oder der externe Zustand zwischen Aufrufen ändern.

Parallelität

Da reine Funktionen keinen externen Zustand ändern oder Seiteneffekte erzeugen, sind sie Thread-sicher. Sie können sie gleichzeitig ausführen, ohne sich Gedanken über Racebedingungen oder Synchronisierungsprobleme machen zu müssen.

Im Gegensatz dazu kann es schwierig sein, unreine Funktionen gleichzeitig auszuführen, da sie sich gegenseitig stören oder unerwartetes Verhalten hervorrufen können, wenn sie parallel ausgeführt werden. Wenn beispielsweise zwei Threads auf dieselbe globale Variable zugreifen und diese ändern, können sie die Änderungen des anderen überschreiben oder inkonsistente Ergebnisse erzeugen.

Reine Funktionen vs. Unreine Funktionen

Sie können Programme mit einer Kombination aus reinen und unreinen Funktionen schreiben, da jeder Typ seine Verwendung hat.

Reine Funktionen lassen sich einfach optimieren, testen und parallelisieren, wodurch sie sich für Anwendungsfälle wie funktionale Programmierung, Caching, Tests, parallele Programmierung und Datenverarbeitungsaufgaben eignen.

Unreine Funktionen stellen jedoch Herausforderungen beim Testen und bei der Parallelität dar, sind jedoch hilfreich, wenn mit veränderlichen Datenstrukturen gearbeitet oder mit externen Systemen und Ressourcen interagiert wird.