Reine Funktionen sind die Bausteine ââder funktionalen Programmierung. Sie werden fĂŒr Einfachheit und Testbarkeit geliebt.
In diesem Artikel finden Sie eine
Checkliste , anhand derer Sie feststellen können, ob eine Funktion rein ist oder nicht.

Checkliste
Eine Funktion muss zwei Bedingungen erfĂŒllen, um als âreinâ zu gelten:- Jedes Mal, wenn die Funktion dasselbe Ergebnis zurĂŒckgibt, wenn sie mit denselben Argumenten aufgerufen wird
- keine Nebenwirkungen
Lassen Sie uns genauer betrachten.
1. Der gleiche Eingang => Der gleiche Ausgang
Vergleichen Sie dies:
const add = (x, y) => x + y; add(2, 4); // 6
Mit diesem:
let x = 2; const add = (y) => { x += y; }; add(4); // x === 6 (the first time)
Im ersten Fall wird der Wert basierend auf den angegebenen Parametern zurĂŒckgegeben, unabhĂ€ngig davon, wo / wann Sie ihn aufrufen.
Wenn Sie 2 und 4 addieren, erhalten Sie immer 6.
Nichts beeinflusst das Ergebnis.
Unreine Funktionen = inkonsistente ErgebnisseDas zweite Beispiel gibt nichts zurĂŒck. Er verlĂ€sst sich auf die allgemeine Bedingung, um seine Arbeit auszufĂŒhren, indem er die Variable auĂerhalb seines Feldes erhöht.
Dieses Modell ist ein Albtraum fĂŒr Entwickler.
Der gemeinsam genutzte Status fĂŒhrt eine ZeitabhĂ€ngigkeit ein. Sie erhalten unterschiedliche Ergebnisse, je nachdem, wann Sie die Funktion aufgerufen haben. Das erste Mal ist das Ergebnis 6, das nĂ€chste Mal 10 und so weiter.
Was ist besser?In welchem ââFall erhalten Sie weniger Fehler, die nur unter bestimmten Bedingungen auftreten?
In welchem ââFall ist es wahrscheinlicher, dass Sie in einer Multithread-Umgebung erfolgreich sind, in der ZeitabhĂ€ngigkeiten das System beschĂ€digen können?
Auf jeden Fall in der ersten.
2. Keine Nebenwirkungen

Dieser Test ist eine Checkliste fĂŒr sich.
Beispiele fĂŒr Nebenwirkungen:- Ănderung der Eingabeparameter
- console.log
- HTTP-Aufrufe (AJAX / fetch)
- DateisystemÀnderung
- DOM-Anfragen
TatsĂ€chlich bezieht sich jede von einer Funktion ausgefĂŒhrte Arbeit nicht auf die Berechnung des Endergebnisses.
Ich rate Ihnen, sich das
Video von Bob Martin anzuschauen.
Hier ist eine "schmutzige" Funktion mit einem Nebeneffekt.
const impureDouble = (x) => { console.log('doubling', x); return x * 2; }; const result = impureDouble(4); console.log({ result });
console.log hier ist ein Nebeneffekt, aber es wird nicht schaden. Bei gleichen Daten erhalten wir immer noch die gleichen Ergebnisse.
Dies kann jedoch zu Problemen fĂŒhren.
Objektwechsel âunreinâ
const impureAssoc = (key, value, object) => { object[key] = value; }; const person = { name: 'Bobo' }; const result = impureAssoc('shoeSize', 400, person); console.log({ person, result });
Die Personenvariable wurde fĂŒr immer geĂ€ndert, da die Funktion durch eine Zuweisungsanweisung deklariert wurde.
Geteilter Zustand bedeutet, dass die Auswirkungen von
unreinem Assoc nicht mehr vollstĂ€ndig erkennbar sind. Um die Auswirkungen auf das System zu verstehen, mĂŒssen Sie jetzt jede Variable verfolgen, die es jemals berĂŒhrt hat, und den Verlauf kennen.
Geteilter Zustand = ZeitabhÀngigkeiten.Wir können
impureAssoc löschen, indem wir einfach ein neues Objekt mit den gewĂŒnschten Eigenschaften zurĂŒckgeben.
"Wir reinigen es" const pureAssoc = (key, value, object) => ({ ...object, [key]: value }); const person = { name: 'Bobo' }; const result = pureAssoc('shoeSize', 400, person); console.log({ person, result });
PureAssoc gibt jetzt das Testergebnis zurĂŒck, sodass Sie sich keine Sorgen machen mĂŒssen, wenn es sich an anderer Stelle Ă€ndert.
Es könnte so gemacht werden:
const pureAssoc = (key, value, object) => { const newObject = { ...object }; newObject[key] = value; return newObject; }; const person = { name: 'Bobo' }; const result = pureAssoc('shoeSize', 400, person); console.log({ person, result });
Das Ăndern der Eingabe kann gefĂ€hrlich sein, aber das Ăndern der Kopie ist kein Problem. Das Endergebnis ist eine testbare, vorhersehbare Funktion, die unabhĂ€ngig davon funktioniert, wo und wann Sie sie aufrufen.
Ănderungen sind auf diesen kleinen Bereich beschrĂ€nkt, und Sie geben den Wert immer noch zurĂŒck.
Zusammenfassung- Eine Funktion ist rein, wenn sie keine Nebenwirkungen hat und jedes Mal dasselbe Ergebnis zurĂŒckgibt, wenn sie mit denselben Argumenten aufgerufen wird.
- Zu den Nebenwirkungen gehören: Ăndern der Eingabe, HTTP-Aufrufe, Schreiben auf die Festplatte, Ausgabe auf dem Bildschirm.
- Sie können die Eingabeparameter sicher klonen und dann Àndern. Lassen Sie das Original einfach unverÀndert.
- Die Verteilungssyntax (... Syntax) ist der einfachste Weg, Objekte und Arrays zu klonen.