Eine Eigenschaft ist eine Variable mit einem bestimmten Gültigkeitsbereich. Lingo kennt 3 Gültigkeitsbereiche. Dieser Bereich beschreibt, an welchen Stellen im Skript Variablen ausgelesen bzw. gesetzt werden können.
| Variablentyp | Codewort | Gültigkeit |
|---|---|---|
| lokale Variablen | kein Codewort nötig | Lokale Variablen haben nur innerhalb des eigenen Handlers Gültigkeit. |
| globale Variablen | global | Globale Variablen haben in allen Skripten Gültigkeit, auch über den Directorfilm, in dem sie definiert werden, hinaus. Voraussetzung ist, dass sie im jeweiligen Skript als global definiert werden. |
| Eigenschaften | property | Eigenschaften haben nur in einer Objektinstanz Gültigkeit. Sie können innerhalb der Instanz direkt, außerhalb der Instanz über eine Referenz angesprochen werden. |
Konvention
Es ist allgemein üblich, dass Namen für globale Variablen mit einem
kleinen g anfangen, z.B. gPunktestand, gUsername.
Eigenschaften fangen meist mit einem m für "member" an, z.B.
mBreite, mDatei.
Es ist aber auch nicht unüblich, ein p für "property" zu
verwenden.
Wir wollen nun das Parent-Skript GrussObjekt schreiben, dass eine anpassbare hallo-Methode besitzt.
property mGrusstext
on new me
mGrusstext = "Hallo."
return me
end new
on hallo me
put mGrusstext
end hallo
Hier sehen wir eine weitere Aufgabe des new-Handlers, nämlich die Eigenschaftsvariablen auf einen definierten Anfangszustand zu setzen. Es ist daher üblich, die Werte, die das Objekt zum initialisieren braucht, gleich dem new-Handlers zu übergeben. Das sieht in unserem Beispiel so aus:
on new me, grussText
mGrusstext = grussText
return me
end new
Das Objekt wird dann folgendermaßen erzeugt:
objekt = script("GrussObjekt").new("Hallo")
Achtung
Die Werte der Argumente müssen explizit den Eigenschaften zugeordnet werden!
Eine Methode der Form
on new me, mGrusstext
return me
end new
würde den Wert der Eigenschaft mGrusstext nicht verändern!
Wenn wir den Wert einer Eigenschaft ändern wollen, gibt es dafür zwei Möglichkeiten:
1. das direkte Setzen der Eigenschaft
objekt.mGrusstext = "Guten Tag"
2. das Setzen der Eigenschaft durch eine Methode
objekt.setGruss("Guten Tag")
Wobei setGruss: folgendermaßen aussieht:
on setGruss me, grusstext
mGrussText = grusstext
end setGruss
Analog dazu gibt es zwei Möglichkeiten, eine Eigenschaft auszulesen:
1. das direkte Auslesen der Eigenschaft
put objekt.mGrusstext
2. das Auslesen der Eigenschaft durch eine Methode
objekt.getGruss()
Wobei getGruss: folgendermaßen aussieht:
on getGruss me
return mGrussText
end getGruss
Obwohl es auf den ersten Blick umständlich erscheint, ist das Lesen und Setzen von Eigenschaften durch eine Methode eine empfehlenswerte Vorgehensweise. Der Zugriff auf Eigenschaften ist transparenter und leichter nachvollziehbar. Es ist sehr einfach, nachträglich Funktionalitäten zu ergänzen oder Debug-Nachrichten auszugeben. In unserem Beispiel kann es zum Beispiel später nötig sein, dass mGrusstext eine Zeichenkette ist. Dann muss die Funktion setGrusstext() nur ergänzt werden:
on setGruss me, grusstext
mGrussText = string(grusstext)
end setGruss
Dies ist einfacher, als die unter Umständen zahlreichen Zugriffe auf mGrusstext im nachhinein abzuändern.
Methoden, die Eigenschaften setzen, heißen in Lingo üblicherweise set + Eigenschaftsname. Methoden, die Eigenschaften auslesen, heißen üblicherweise get + Eigenschaftsname.
| 4.3 Methoden definieren | 4.5 Beispiel 1: Zini | ||