Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Swift lernen

Algorithmen in Variablen speichern

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Funktionen können als Variable übergeben werden. Die Syntax ist ein bisschen gewöhnungsbedürftig, jedoch sehr klar strukturiert.
11:19

Transkript

Closures stellen eine ganz besonders elegante Möglichkeit dar, Code innerhalb von Variablen zu transportieren, und zur Verfügung zu stellen, so dass andere Funktionen jederzeit von außen definierten Code ausführen können. Klingt jetzt kompliziert, für viele Einsteiger ist das auch ein Buch mit sieben Siegeln aber ich denke in diesem Video werden wir klären, was Closures sind, und dass die Arbeit mit Closures in Swift alles andere als kompliziert ist. Machen wir uns dazu ein neues Projekt, einen Playground, und schauen wir uns dann das Thema der Closures einmal an. Funktionen kennen wir, eine Funktion "sagHallo", die kein Argument bekommt, die nichts liefert, und die einfach freundlicherweise ein "Hallo" auf die Konsole schreibt, und wenn wir diese Funktion aufrufen, dann wird auch genau das passieren. Jetzt haben wir hier gesagt, das ist die Funktion sagHallo, sie bekommt keine Argumente, und sie liefert auch nichts zurück, das war ja eine der Schreibweisen, die wir für Funktionen wählen können. Und jetzt gehen wir mal her, und definieren uns ein Closure. Ein Closure ist also ein Block von Code, wir machen eine geschweifte Klammer auf, und wir sagen, ich brauche keine Argumente, und ich liefere nichts, und nach dem Schlüsselwort in kommt die Implementierung, und wir sagen, "Hallo aus dem Closure" Ja, hier haben wir tatsächlich ein anonymes Closure geschaffen, und das sieht natürlich jetzt hier interessant aus, ausführen können wir es nicht, denn uns fehlt ja ein Haken, um jetzt dieses Gerät wirklich zu greifen, also sagen wir doch: halloClosure = und weisen dann diese function einer Variablen, an dieser Stelle sogar einer Konstanten, zu. Und wenn wir dann über unsere Konstante halloClosure() den Zugriff suchen, dann wird es auch ausgeführt, und wir sehen hier in unserer Historie auch, dass Hallo aus dem Closure tatsächlich ausgeführt wurde. So, wie wir also sagen dürfen: let i = 42 darf ich auch sagen: let halloClosure = und wir definieren hier dieses Closure. Weil jetzt etwas, das keine Argumente braucht, und keine liefert, so ein Standardfall ist, darf man dann sich auch diese Notation hier wegdenken, genauso, wie man sich diese da wegdenken kann, aber, wer eben sich angewöhnt, damit zu arbeiten, der hat's natürlich wesentlich einfacher, wenn wir mit dem Thema Closures jetzt auf den nächsten Level springen. Denn wozu sollte das Ganze gut sein? Lassen Sie uns doch gemeinsam eine Addition als Closure formulieren. let Addition: Was? Ich muss den Datentyp angeben, was wäre denn der Datentyp? Der Datentyp ist weder Int, Double noch Float, der Datentyp wäre eine Funktion, die ein a als Integer bekommt, und ein b als Integer bekommt, und einen Integer zurückliefert. Das ist jetzt unser Datentyp! Eine Funktion mit zwei Argumenten, die einen Integer liefert. Na, dann wollen wir doch das auch gleich implementieren, und hier unserer Addition zuweisen. Dann darf ich doch diesen Ausdruck schon mal kopieren, weil ich das Closure genau so definiere, und sage dann in, und was muss gemacht werden? Return a + b Und wir haben jetzt hier ein Closure geschaffen, das zwei Argumente bekommt, und die Summe dieser zwei Argumente als Integer zurückliefert. Jetzt können wir uns dieses Closure nehmen, duplizieren, und wir machen noch eine Multiplikation, die sich darin unterscheidet, dass unsere zwei Argumente a und b miteinander multipliziert werden. Nun darf ich testweise unsere Closures einmal aufrufen, für a haben wir 5, für b haben wir 12, dann ist das Ergebnis 17, rufe ich es auf mit der Multiplikation, haben wir 60, weil 5 mal 12 immer noch 60 ist. Na, jetzt kann man sich fragen, Moment mal, warum mache ich es denn dann hier als Konstante, wenn ich es doch auch als Funktion machen kann? Ja, der Punkt ist der, dass ich dann diese Closures anderen Funktionen zur Verfügung stellen kann. Und wenn wir eine Funktion haben: universalCalculator, universalCalc (lacht) und universalCalc ist definiert als: Ich habe einen a-Integer und ich habe einen b-Integer, und ich habe ein Argument, das ist hier die calculation, und das ist jetzt weder Int, Float, Double noch sonst was, calculation ist genau so eine Definition eines Closures, dann darf unsere Funktion universalCalc natürlich auch diese Kalkulation die ihr als Funktion, aber auch als Argument übergeben wurde, aufrufen, und bedienen, zum Beispiel mit diesen zwei Argumenten. universalCalc darf also ausführen - fügen wir es noch hier hinzu, wir geben zurück einen Int - und dann geben wir zurück: Return calculation und zwar für a übergeben wir a - manchmal ist Code-Completion nicht unbedingt ein Segen - und für b übergeben wir b. So, und jetzt haben wir etwas Superschickes, ich kann nämlich sagen: universalCalc für 7 und 12 universalCalc für 7 und 12 Führe doch bitte aus eine Addition! Und das Ergebnis ist 19, weil ja 7 plus 12 = 19 ist. Führe doch bitte aus eine Multiplikation! Wow! 84! Also, es sieht natürlich furchtbar technisch aus, damit kann man die Kollegen wunderbar beeindrucken, aber im Detail gesehen, ist es wirklich nicht so kompliziert, ich rolle das Thema nochmal auf. Addition ist eine Konstante, der Datentyp ist eine Funktion, mit zwei Argumenten, die ein Integer zurückliefert. Das schreiben wir dann hier noch mal hin, mit dem kleinen Keyword in, und dürfen danach den Quelltext hinschreiben, der eben was auch immer macht, und bitte, an dieser Stelle nicht nur ein einfaches Return-Statement sehen, ein Closure darf natürlich aus einer Core Database sich irgendwelche Werte holen, einen Server kontaktieren, eine URL auflösen, Jason Parsen, was auch immer, Und man schreibt eben diese Funktion an einer bestimmten Stelle, und man kann sie dann in andere Funktionen hineingeben, und je nachdem, was man hier hineingibt, wird eben das eine oder das andere aufgerufen, also hoch elegant. Stellen Sie sich vor, sie haben einen XML-Parser und einen Jason-Parser, Sie wissen nicht, was gibt denn ihr Server zurück? Bekommen Sie XML, rufen Sie Ihre Verarbeitungsroutine auf mit dem XML-Parser, bekommen Sie Java, rufen Sie Ihre Verarbeitung auf mit dem Jason-Parser. Und genau das haben wir hier mal gezeigt. Indem man sagt, es gibt jetzt universelle Funktionen, die bekommen beliebige Argumente, und unter anderem auch eine calculation, und diese calculation ist eben nur der Datentyp: "Funktion mit zwei Argumenten liefert mir ein Int zurück" Und dann darf ich innerhalb dieser Funktion auf diesen Parameter zugreifen, und rufe, was auch immer mir übergeben wurde, als calculation auf, ich muss nur dafür sorgen, dass hier mein a und mein b übergeben wird, und schon habe ich beim Aufruf hier den Luxus zu sagen: Ja, berechne mir doch bitte die Addition oder die Multiplikation, oder was weiß ich denn noch, zu meinen zwei Eingangsparametern. Das heißt, ein Taschenrechner oder ähnliches lässt sich natürlich mit Closures sehr sehr leicht herstellen, weil wir lebendigen Code quasi als Argumente übergeben können. Die Syntax von Closures bietet noch viele viele weitere Abkürzungen, wenn ein Closure das letzte Argument in einer Funktion ist, dann darf es auch außerhalb der Funktion, quasi dann direkt geschrieben werden, und solche Sachen. Das soll jetzt hier für den Einstieg und für das Prinzipielle begreifbar machen: was sind Closures, aber nicht nötig sein, im Detail auszuarbeiten, so möchte ich das stehen lassen, das sind Closures in Swift, ein fantastisches Instrument, um wartbaren, erweiterbaren Code zu schreiben, der wirklich auch lesbar ist, und tolle Funktionalitäten beinhaltet.

Swift lernen

Erkunden Sie die wichtigsten Sprachmerkmale von Swift und ihre modernen Eigenschaften wie Generics, Extensions, Tupels und Optionals.

4 Std. 2 min (30 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!