Anonyme Methoden

Du hast sicherlich schon einmal anonyme Methoden gesehen. In dieser Woche wollen wir dein Verständis etwas festigen und gehen auf das Thema der anonymen Methoden ein. Wir erläutern dir, wozu anonyme Methoden dienen können, welche Vor- und Nachteile sie besitzen können und was überhaupt ein „Scope“ ist.

Heute werden wir mal etwas komplexer in das Thema “JavaScript” hereinschnuppern. Es gibt sehr viele Dinge um die Entwicklung zu vereinfachen.

Vielleicht hast du ja auch bereits versucht, eine App auf Knuddels zu entwickeln. Natürlich ist es gerade als Anfänger relativ schwer zu verstehen, wie alles abläuft, sich Dinge zu merken und vor allem erst einmal mit den vorhandenen Ideen im Kopf etwas an zu stellen.

Zwar ist dieser Beitrag viel mehr für Entwickler bestimmt, die schon die Grundlagen beherrschen, aber auch als purer Anfänger könnte man gegebenenfalls ein “Aha”-Effekt verspüren.

Kleiner Tipp von mir…
Tipp Haltet euch nicht daran fest, komplex zu denken. Die Programmierung beruht auf Verständnis und Logik, nicht etwa auf Namenskenntnis der Methoden. Wenn du das Verständnis aufgebracht hast, wie es funktioniert, es “Klick” gemacht hat, ist das umsetzen viel einfacher.

 

In dieser Woche werden wir das Thema anonyme Methoden ansprechen und erklären. Dieses Kapitel umfasst folgende Themen:

  • Anonyme Methoden
    • Was sind anonyme Methoden?
    • Wozu dienen sie?
    • Darf ich einfach anonyme Methoden benennen?
    • Was ist ein „Scope“?
    • Was für Vor- und Nachteile haben diese?

In der nächsten Woche werden wir dann aber noch das Thema Debugging thematisieren, wo die Kenntnis der anonymen Methoden als Grundlage dienen.

Anonyme Methoden

Jeder hat es sicherlich schon einmal gesehen; Methoden, die genutzt werden, die nicht sonderlich aufschlussreich sind, einfache Funktionen, die als “schnelle” Methode geschrieben werden.

Information
TippEine Funktion ist gleichzeitig eine Methode. In kaum einer Programmier- oder Scriptsprache bis auf JavaScript wird das umgangssprachliche Wort “Funktion” verwendet, in anderen wird dies bei Programmierern als “Methode” bezeichnet.

Was sind Anonyme Methoden?

Anonyme Methoden sind Funktionen, die ohne Namen betitelt werden. Oftmals dienen diese zur schnellen Verwendung für einen Aufruf. Eine normale Methode besitzt das Schlüsselwort “function” mit der nennung eines Namens und die in Klammern gesetzten Parameter:

function HalloWelt(parameter1, parameter2) {}

Anonyme Methoden hingehen haben keine Benennung der Funktion:

function(parameter1, parameter2) {}

Wozu dienen Anonyme Methoden?

Dies ist der einfachste und vor allem schnellste Weg um etwas ausführen zu lassen.

Wenn Funktionen sehr einfach sind, verbessern sie die Lesbarkeit des Codes und halten ihn besser zusammen. Anonyme Methoden erzeugen aber einen abgeschirmten Bereich, der sogenannte “Scope”. Dieser kann entweder als Vor- oder Nachteil des Scriptes dienen.

Gehen wir mit einem simplen Beispiel in einer App voran:

var App = (new function() {
     this.onAppStart = function() {

     };
})();

Wie du siehst, haben wir hier direkt zwei anonyme Methoden auf einmal, bloß was bewirken diese?

Die erste Methode stellt den App-Container (so nennen wir diesen) dar, also der Bereich, der sich hinter der Variable “App” verbirgt. Durch das Schlüsselwort “new” wird die anonyme Methode direkt initiiert, also ausgeführt. Ohne, dass man die Funktion irgendwo im Code aufrufen muss wird diese gestartet.

Die zweite Funktion repräsentiert die Funktion “onAppStart”, die später durch den AppServer mittels “App.onAppStart();” ausgeführt wird, sobald die App gestartet wird.

Darf ich einfach anonyme Methoden benennen?

Ja, es ist sogar äußerst Sinnvoll dies zu tun. Du wirst im späteren Verlauf unter dem Thema “Debugging” mehr dazu erfahren.

Kleiner Tipp von mir…
TippDurch Benennung der Methoden kannst du viel schneller zu der Stelle finden, an der das Problem besteht. Unbenannte anonyme Methoden  lassen dein Script unter anderem nicht mehr so transparent und unübersichtlich erscheinen.

 

Hier ein Beispiel, wie anonyme Methoden benannt werden können:

var App = (new function AppContainer() {
     this.onAppStart = function onAppStart() {

     };
})();

Was für Vor- und Nachteile können anonyme Methoden haben?

Es gibt verschiedene Aspekte, die für das verwenden von anonymen Methoden in Betracht gezogen werden können. Sobald eine anonyme Methode abgearbeitet ist, wird der Inhalt des Scopes vernichtet und das globale Objekt bleibt dabei unverändert. Durch das anwenden von anonymen Methoden kann man das Script vor Überschneidungen und Kollisionen mit anderen Teilen schützen.

Warum ändert sich der Scope, was ist überhaupt ein Scope?

e2ed1078ab1e37e0ded37c9ff0d8bbf412114b55440c317842pimgpsh_fullsize_distr Stell dir vor, du besitzt eine Matryoshka Figur; Du wirst sie sicherlich kennen: eine Holzpuppe in der immer kleiner werdende Puppen stecken. Öffnest du die Puppe, findest du eine weitere, die du öffnen kannst.

Jede Puppe ist einem separat abgeschotteter Bereich. Du kannst den Inhalt von außen nicht erreichen. Dieser Bereich ist der Scope.

Der Bereich ändert sich in verschiedenen Szenarien, unter anderem ist eine Klasse ein eigener Bereich oder eben eine anonyme Methode. Diesen Bereich kannst du nur betreten, in dem du globale Daten definiert oder durch einen Faden verbunden hast.

Hier ein kleines Beispiel um das ganze zu erläutern:

var Bereich1 = function() {
     var DatenAusDiesemBereich = 'Hallo Welt';
};

var Bereich2 = function() {
     this.halloWelt = function() {
          // Hier möchte ich auf Bereich1 zugreifen.
     };
};

// Rufe die Funktion auf
Bereich2();

Du kannst von “Bereich2” nicht auf die Variable “DatenAusDiesemBereich” aus “Bereich1” zugreifen. Einfach, weil diese nicht zugänglich sind. Möchtest du dies trotzdem tun, musst du von der nächst höheren Ebene aus darauf zugreifen können.

Dies kannst du entweder tun, in dem die Variable öffentlich ist:

var Bereich1 = function() {
     this.DatenAusDiesemBereich = 'Hallo Welt';
};

var Bereich2 = function() {
     this.halloWelt = function() {
          // Hier möchte ich auf Bereich1 zugreifen.
          var Resultat = Bereich1.DatenAusDiesemBereich;
     };
};

// Rufe die Funktion auf
Bereich2();

oder du eine sogenannte Getter-Methode definiert hast:

var Bereich1 = function() {
     var DatenAusDiesemBereich = 'Hallo Welt';

     this.getDatenAusDiesemBereich = function() {
          return DatenAusDiesemBereich;
     };
};

var Bereich2 = function() {
     this.halloWelt = function() {
          // Hier möchte ich auf Bereich1 zugreifen.
          var Resultat = Bereich1.getDatenAusDiesemBereich();
     };
};

// Rufe die Funktion auf
Bereich2();

Wenn man das Grundprinzip versteht, ist es recht einfach. Hat es schon bei dir “klick” gemacht?

Ich hoffe doch sehr, denn dies ist einer der ersten Schritte bei der Programmierung: man muss die Logik dahinter verstehen. Hast du dies erst einmal begriffen, fällt dir alles wesentlich einfacher.

Was sind Vor- und Nachteile?

Zu bestimmen, was nun Vor- oder Nachteile sind ist extrem schwierig, denn es kommt immer darauf an, was man machen möchte. Die Eigenschaften von anonymen Methoden können einen Vorteil besitzen, aber auch ein Nachteil haben. Hier ein kleiner Überblick einer anonymen Methode:

  • Separat abgeschotteter Bereich1bd36a407f1883f29e988a52c17fd21a811190113fd83008d8pimgpsh_fullsize_distr
  • Bündeln von Daten ohne dass diese im globalen Kontext überschrieben werden können
  • Man kann nicht ohne weiteres innerhalb diesen Bereiches zugreifen (was aber ggf. auch ein Vorteil sein kann! Beispiel: Verhindern von Manipulationen außerhalb)
  • Kann nicht mehrfach verwendet werden, es wird immer eine neue Instanz erzeugt

Unter umständen kann es sein, dass die Methode oft verwendet wird. Bedenke: Jeder Aufruf einer anonymen Methode benötigt Speicher, diese wird bei jedem Aufruf neu erzeugt. Durch die Speicherüberlastung könnte unter Umständen alles langsamer werden, sofern die Methoden große Lebenszyklen besitzt.

Damit hätten wir heute etwas über anonyme Methoden gelernt. Nächste Woche werden wir, wie bereits oben erwähnt, das Thema mit „Debugging“ fortführen.

Hinterlasse einen Kommentar