Was ist eine reine Funktion?
Nun, eine reine Funktion sieht so aus, wir haben eine Funktion, also stellen Sie sich dies anstelle einer Box, die
wir zuvor mit Objekten all dieser Funktionalitäten hatten, als einfache Funktion vor.
Und sagen wir, wir geben ihm eine Liste mit eins, zwei und drei.
Wenn wir diese Eingabe in diese Funktion geben, würden wir bei einer reinen Funktion erwarten, dass mit dieser
Eingabe etwas passiert, das jedes Mal zum gleichen Ergebnis führt.
Nehmen wir an, wir multiplizieren dies mit zwei, wir erhalten zwei, vier und sechs.
Nun hat eine reine Funktion zwei Regeln.
Eine ist, dass bei der gleichen Eingabe immer die gleiche Ausgabe zurückgegeben wird, dh jedes Mal, wenn wir eins, zwei und drei in
diese Liste eingeben, geben wir sie an eine von uns erstellte Funktion.
Es sollte immer die gleiche Ausgabe zurückgeben.
Wenn ich diese Funktion also millionenfach mit der gleichen Eingabe ausführe, sollte sie zur gleichen Ausgabe führen.
Und der zweite Punkt ist, dass diese Idee einer Funktion keine Nebenwirkungen haben sollte.
Was sind Nebenwirkungen?
Nebenwirkungen sind Dinge, die eine Funktion haben.
Hat das Auswirkungen auf die Außenwelt?
Wenn ich zum Beispiel etwas innerhalb dieser Funktion drucken soll, wirkt sich das auf die Außenwelt aus, richtig?
Weil ich etwas auf einen Bildschirm drucke.
Der Bildschirm ist die Außenwelt.
Oder wenn diese Funktion zum Beispiel eine Variable berührt, die außerhalb eines anderen Bereichs lebt, ist das
ein Nebeneffekt.
Werfen wir einen Blick.
Ein Code, um dieses Konzept ein wenig besser zu verstehen.
Nehmen wir an, wir hätten eine Funktion und dann wird diese Funktion multipliziert.
Von zu einer Liste, also sagen wir einfach einen Verbündeten, der unsere Liste sein wird, und hier wollen
wir den Gegenstand durchlaufen.
Im letzten.
Und dann jedes Element, das wir multiplizieren und an eine neue Liste anhängen möchten.
Lassen Sie uns also eine neue Liste erstellen, die eine leere Liste sein wird.
Und hier sagen wir neue Liste, Punkt anhängen.
Und tun Sie es mit zwei multiplizieren.
Und schließlich, am Ende dieser Funktion, wollen wir die neue Liste zurückgeben.
Lassen Sie uns das versuchen.
Wenn ich sage, multipliziere mit zwei und gebe eins, zwei, drei und lass uns ausdrucken.
Hier die Ausgabe.
Wenn ich klicke, laufe.
Ich bekomme zwei, vier, sechs.
Ist dies eine reine Funktion, denken wir darüber nach.
Die erste Regel gibt die gleiche Eingabe an, also eins, zwei und drei.
Es wird immer die gleiche Ausgabe zurückgeben, egal wie oft ich dies ausführe, es wird mir immer
die gleiche Ausgabe liefern.
Also, OK, wir haben den ersten Test bestanden.
Was ist mit dem zweiten Test, der keine Nebenwirkungen hervorruft?
Bringt das irgendwelche Nebenwirkungen mit sich?
Berührt das etwas in der Außenwelt?
Denk darüber nach.
Nein, es schreibt nichts in die Außenwelt, was für diese Funktion von Bedeutung ist.
Denn hier ist alles enthalten.
Wenn wir zum Beispiel hier statt Print einfach nur Print haben.
Und hier.
Wenn ich klicke, laufe.
Wir erhalten die gleiche Ausgabe, aber hat dies Nebenwirkungen?
Nun ja, das tut es.
Es interagiert mit der Außenwelt, die die Druckaussage ist.
Die print-Anweisung sagt mir, hey, ich werde auf jedem Display dieses Geräts drucken.
In unserem Fall wird es hier gedruckt, aber wir wissen nicht wirklich, was die print-Anweisung bewirkt, da sie
mit dem Bildschirm auf dieser Seite interagiert.
Also das.
Nebenwirkungen, wir geben dem Druck die Kontrolle, aber wir wissen nicht, was der Druck bewirken wird.
Ein weiteres Beispiel, das ich Ihnen geben kann.
Ist das, wenn wir hier eine neue Liste haben, die wir tatsächlich außerhalb definieren?
Wie so.
Damit wir eine neue Liste wie diese haben, wenn ich auf Ausführen klicke.
Ich komme immer noch auf vier, sechs, aber hat das Nebenwirkungen?
Nun ja, das tut es.
Es interagiert mit der Außenwelt und was außerhalb dieser Welt einer Funktion ist, die sich erinnert,
ist der Geltungsbereich, nun ja, es interagiert mit dieser neuen Liste.
Es passiert mit dieser neuen Liste.
Wenn also ein Programmierer vorbeikommt und vielleicht bevor wir diese Funktion ausführen, beschließen wir, neue Liste zu sagen.
Wir ändern es in einen leeren String.
Nun, wenn ich diese Funktion ausführe.
Ich erhalte eine Fehlermeldung, weil diese neue Liste jetzt ein String-Objekt ist.
Die neue Liste, die in der Außenwelt dieser Funktion lebt, kann also von einem anderen Entwickler oder von einem Programm geändert
werden, ohne dass wir davon erfahren würden.
Und wenn wir diese Funktion ausführen, erhalten wir einen Fehler.
Es hat eine Nebenwirkung.
Idealerweise enthalten wir also unsere Funktionen.
Und machen Sie sie rein, denn wie Sie sehen, werden wir nie einen Fehler oder Fehler in unserem Code haben, es sei
denn, wir haben hier etwas falsch geschrieben, sondern weil uns die Außenwelt egal ist, weil alles,
was wir Geben als Eingabe wird immer eine gute Ausgabe erzeugen, sie wird rein sein.
Es ist schwer zu verstehen, warum dies ein so starkes Konzept ist, ohne ein wenig Erfahrung am Arbeitsplatz zu
haben.
Aber lassen Sie mich Ihnen dies nur sagen, wenn Sie reine Funktionen haben.
Sie haben weniger fehlerhaften Code und können Ihren Code besser testen.
Es ist einfacher, Ihren Code und insgesamt zu verstehen.
Sie haben die Vorteile, dass Sie nicht unterschiedliche Teile Ihres Codes haben, sich gegenseitig berühren und sich
gegenseitig beeinflussen, was Ihr Leben als Programmierer so viel einfacher macht.
Diese Idee reiner Funktionen ist also wirklich wichtig.
Aber eines möchte ich Ihnen mitnehmen, dass reine Funktionen eher eine Richtlinie als ein
absolutes sind.
Es ist unmöglich, überall reine Funktionen zu haben, denn wenn eine Funktion die Außenwelt überhaupt nicht
beeinflusst, hätten wir keine Programme.
Wir wären nicht in der Lage, Dinge anzuzeigen.
Wir wären nicht in der Lage, Dinge wie unser Spielprofil zu speichern.
Es ist also unmöglich, überall reine Funktionen zu haben.
Wenn Sie jedoch können, wo immer Sie können, lehrt uns die funktionale Programmierung, dass Ihre Funktionen gut sind.
Versuchen Sie, reine Funktionen zu erstellen und nur wenige nicht reine Funktionen zu haben, die möglicherweise mit der
Außenwelt interagieren, auf die wir zurückgreifen können, wenn wir Fehler in unserem Code haben, denn höchstwahrscheinlich werden
dies diejenigen sein, die Fehler haben werden, dann reine Funktionen wie dies, um unser Konzept der funktionalen Programmierung abzuschließen.
Wäre dies zum Beispiel unser Wizard aus den vorherigen Videos mit funktionaler Programmierung, hätten
wir ein Wizard-Objekt.
Oder Wizzard-Wörterbuch, das einen Namen hatte.
Sagen wir Marlon.
Und Macht.
Von 50.
Und anstatt diese in einer Klasse zusammenzufassen, hätte ich verschiedene Methoden wie Angriff.
Und dies wäre keine Methode, sondern eine Funktion, da sie nicht innerhalb einer Klasse lebt.
In der funktionalen Programmierung heißt es, hey, wir müssen Daten nicht mit Funktionen kombinieren, lasst uns diese
voneinander trennen, lasst uns einfach reine Funktionen erstellen, die so etwas wie ein Zeichen übergeben können.
Und auf diese Weise halten wir diese beiden Dinge getrennt, sodass wir uns auf reine Funktionen und auf
Daten konzentrieren können. Hier liegt der Unterschied.
Letztendlich geht es darum, unser Fell sauber zu halten und Fehler in unserem Fell zu vermeiden, ein
großes Problem, das Programmierer ständig haben.
Es ist also nur eine andere Denkweise.
Lassen Sie uns im nächsten Video mehr erfahren.