4.3 Methoden definieren

Wie wollen unser Objekt nun um die Methode hallo() erweitern, die den Satz "Hallo Welt" im Nachrichtenfenster ausgeben soll.

on hallo me
put "Hallo Welt!"
end hallo

Wichtig ist, dass wir zuerst eine neue Instanz des Skripts erzeugen, da die Referenz in objekt1 sich auf eine Kopie des Objekts im Speicher bezieht, die nicht automatisch aktualisiert wird. Ein Aufruf der neuen Methode würde zum Skriptfehler Handler not found in Object... führen. Wir erzeugen also eine neue Instanz mit

objekt1 = script("MeinObjekt").new()

und rufen die hallo()-Methode auf:

objekt1.hallo()

Im Nachrichtenfenster erscheint die Ausgabe

-- Hallo Welt!

Diese Methode ist in ihrem Objekt gekapselt. Wenn wir im Nachrichtenfenster versuchen, die Methode mit

hallo()

direkt aufzurufen, erhalten wird die Fehlermeldung Handler not defined.

Wird innerhalb eines Objektes eine eigene Methode aufgerufen, sollte dies immer über die Objektreferenz me geschehen.

on test me
me.hallo()
end test

Wird me nicht angegeben, wird die Methode zwar trotzdem in diesem Objekt gefunden, aber die Objektreferenz nicht als erster Parameter übergeben. Das kann dazu führen, dass Argumente falsch interpretiert werden, somit entsteht eine zusätzliche Fehlerquelle.

Es ist übrigens empfehlenswert, alle Methodenaufrufe mit Klammern zu schreiben:

methode()
statt
methode

methode(Argument1, Argument2, ...)
statt
methode Argument1 Argument2

Die geklammerte Schreibweise erhöht die Übersichtlichkeit. Bei Methoden, die einen Wert zurückgeben, sind sie zwingend erforderlich.

Es ist zudem zulässig, eine Methode in verschiedenen Parent-Skripten gleich zu benennen. Durch die Angabe des entsprechenden Objektes ist eindeutig, welche Methode gemeint ist.


Wichtig
Der erste Parameter eines Methodenaufrufs ist immer die Objektreferenz! Deswegen sollte eine Methode als erste Argumentvariable immer me haben.


Das ist vor allem wichtig, wenn Werte an die Funktion übergeben werden sollen. Folgende Methode gibt z.B. einen Text im Nachrichtenfenster aus:

on ausgabe me, ausgabeText
put ausgabeText
end ausgabe

Der Aufruf erfolgt z.B. mit

me.ausgabe("Diesen Text ausgeben.")

Der Sinn dieser Schreibweise wird klarer, wenn man einen Blick auf die konventionelle Notation von Lingo wirft, wie sie noch bis Director 6.5 üblich war:

ausgabe(me, "Diesen Text ausgeben.")

bzw. allgemein

Methodenname(Objektreferenz, Argument1, Argument2, ...)

Die Objektreferenz ist bei einem Methodenaufruf immer das erste Argument.

Quellcode des Beispiels

4.2 Erzeugen von Instanzen 4.4 Definieren von Eigenschaften