‫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 besser 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.