D7WS HOMEPAGE WORKSHOP NEUE XTRAS GALERIE WORKSHOP Automatic Translation LESERSERVICE BUCH NEWS

HowTo: Dot-Syntax ist klasse!

 

 

 

Home
Workshop-Seite

Es soll Leute geben, für die die Dot-Syntax das wichtigste neue Feature in Director 7 ist. Was auf jeden Fall wahr ist: die neue Lingo-Notation erleichtert das Skripting ganz erheblich, und produziert lesbareren – und damit möglicherweise nicht ganz so fehleranfälligen – Code.

Hinter der dot- bzw. Punkt-Syntax verbirgt sich eine auch in anderen Programmiersprachen verwendete Notation, die den Zugriff auf die Eigenschaften eines Objekts in der Form

<Objekt>.<Eigenschaft>

ermöglicht. Als Trennzeichen zwischen Objekt und Eigenschaft wird ein Punkt verwendet.
Die neue Syntax macht den Zusammenhang zwischen Objekt und Eigenschaft deutlicher und die Befehlszeilen insgesamt kompakter und leichter verständlich. Daß Lingo durch die neue Syntax etwas von der nahen Verwandtschaft mit dem umgangssprachlichen Englisch einbüßt, sollte nicht als Nachteil empfunden werden. Zumal es jedem Entwickler freisteht, weiter in der alten Syntax zu arbeiten.

Der Befehl set kann sowohl bei Verwendung der alten wie auch der neuen Syntax weggelassen werden, wovon wir in den folgenden Beispielen Gebrauch machen.




 

 

 

 

Darsteller und Sprites

Um z.B. der Variablen theMem den mit Sprite 5 verbundenen Darsteller zuzuweisen, würden Sie in alter Syntax schreiben

myMem = the member of sprite 5

in neuer Syntax genügt

mymem = sprite(5).member

Soll stattdessen der Name des Darsteller zugewiesen werden, werden die Vorteile der neuen Syntax deutlicher. Vergleichen Sie

myMem = the name of the member of sprite 5

mit

myMem = sprite(5).member.name

Darstellerbezeichnungen (Namen oder Nummern) und Spritenummern müssen in runde Klammern gesetzt werden. Dann ist auch die Änderung und Zuweisung von Eigenschaften kein Problem.

member (1).name = "headline"

Sofern ein Darsteller in einer bestimmten Besetzung adressiert werden soll, muß dies in der Form

member(<Darsteller>, <Besetzung>)

erfolgen, wobei für beide Parameter sowohl Nummern als auch Namen verwendet werden können.
Der Befehl

member (1,"gfx").name = "headline2"

würde z.B. den ersten Darsteller in der Besetzung "gfx" umbennen.




 

 

 

 

Listen

Gerade für die Arbeit mit dieser wichtigen Datenstruktur bringt die neue Syntax enorme Vereinfachungen. Hier wird allerdings kein Punkt, sondern das eckige Klammernpaar zur Trennung zwischen Listenname und Listenindex verwendet:

<Listenname>[<Listenindex>]

Um z.B. das dritte Element aus der folgenden linearen Liste

gNameL = ["Anne", "Franzi", "Lara", "Marie"]

zu lesen, schreiben Sie in alter Syntax

put getat(gNameL, 3)

In der neuen Syntax genügt die Angabe des Listenindex in eckigen Klammern.

put gNameL[3]

Die Funktion getAt() entfällt völlig, was sich besonders bei der Verwendung verschachtelter Listen positiv bemerkbar macht.
Um z.B. den vierten Namen aus der zweiten Teil-Liste von

gNameL = [["Anne", "Franzi", "Lara", "Marie"], ["Jonas", "Kai", "Marius", "Tim"]]

zu lesen, ist in alter Syntax der nicht gerade übersichtliche Ausdruck

getat(getat(gNameL, 2),4)

notwendig, während in neuer Syntax lediglich

gNameL[2][4]

geschrieben wird, um den Namen "Tim" zu erhalten.
Selbstverständlich können in dieser Syntax auch Listeninhalte editiert werden:

gNameL[2][4] = "Tom"
put gnameL
-- [["Anne", "Franzi", "Lara", "Marie"], ["Jonas", "Kai", "Marius", "Tom"]]

Bei Eigenschafts- oder Propertylisten setzen Sie mit Befehlen der Form

<Listenname>[<Listenindex>] = <Wert>

den Wert der an der angegebenen Listenposition enthaltenen Eigenschaft:

gNrL = [#Anne: 8, #Franzi: 7, #Lara: 3]
put gNrL[2]
-- 7
gNrL[2] = 9
put gNrL
-- [#Anne: 8, #Franzi: 9, #Lara: 3]

Auch die bekannten Listenfunktionen lassen sich in Dot-Syntax verwenden. Um z.B. das letzte Element der Liste

gNrL = [#Anne: 8, #Franzi: 7, #Lara: 3]

zu erhalten, schreiben Sie anstelle von

getat(gNrL, count(gNrL))

einfach

gNrL[gNrL.count]

Die Bestimmung der Position eines Listenelements funktioniert analog. Statt

getPos(gNrL, 7)

können Sie auch

gNrL.getpos(7)

schreiben.




 

 

 

 

Mehr Listen...

Um Elemente am Ende einer linearen Liste hinzuzufügen, können Sie die Funktion append in Dot-Syntax verwenden oder direkt an das (vorab zu ermittelnde) Listenende schreiben.

gNameL = ["Anne", "Franzi", "Lara", "Marie"]
-- Verwendung von append()
gNameL.append("Steffi")
put gNameL
-- ["Anne", "Franzi", "Lara", "Marie", "Steffi"]
-- direktes Schreiben an der Position Listenende + 1
gNameL[gNameL.count+1] = "Yvonne"
put gNameL
-- ["Anne", "Franzi", "Lara", "Marie", "Steffi", "Yvonne"]

Auch bei Verwendung der Dot-Syntax füllt Lingo nicht bestehende Listenpositionen mit dem Wert Null auf.

gNameL = ["Anne"]
gNameL[5] = "Yvonne"
put gNameL
-- ["Anne", 0, 0, 0, "Yvonne"]

Eigenschaftslisten können zwar neue Elemente hizugefügt werden, allerdings läßt sich dabei keine Listenposition angegeben.

gNrL = [#Anne: 8, #Franzi: 7, #Lara: 3]
gNrL[#Yvonne] = 1
put gNrL
-- [#Anne: 8, #Franzi: 7, #Lara: 3, #Yvonne: 1]

Auf die Werte einer Eigenschaftsliste können Sie in Dot-Syntax unmittelbar zugreifen. Schreiben Sie z.B.

put gNrL.Anne
-- 8

was dem Befehl

put getprop(gnrl, #Anne)

in alter Syntax entspricht.




 

 

 

 

Zeichenketten

werden insofern wie Listen behandelt, als das der Zugriff auf einzelne Elemente durch Angabe eines Index möglich ist.

tmp = "screen"
put tmp.char[1]
-- "s"

Im Unterschied zu Listen sind hier auch Bereichsangaben zulässig. Trennen Sie Start und Ende des Bereiches einfach mit zwei Punkten.

put tmp.char[4..6]
-- "een"

 




 

 

 

 

Points, Rects u.a. spezielle Listen

Die von Director zur Angabe von Punkten und Rechtecken verwendeten speziellen Listenformate können ebenfalls in Dot-Syntax angesprochen werden.

put sprite (5).rect[1]
-- 200

Das direkte Ändern der Größe eines Sprites ist auf dem Wege

sprite (5).rect[3] = 60

allerdings nicht möglich, da zum Setzen der Eigenschaft rect() immer eine vollständige Rect-Liste angegeben werden muß. (Dasselbe gilt analog für die Eigenschaften loc, quad, color etc.)

put sprite(5).rect
-- rect(-24, -1, 45, 62)
tmp = sprite(5).rect
tmp[3] = 60
sprite (5).rect = tmp
updatestage
put sprite(5).rect
-- rect(-24, -1, 60, 62)
put sprite(5).loc[2]
-- 30

Dasselbe gilt für andere spezielle Listen wie z.B. the actorList.

put the actorList[1]
-- <offspring "" 2 839acdc>




 

 

 

 

Variablen

Mit Hilfe der Dot-Syntax sind auch Typ-Umwandlungen von Variablen möglich:

testvar = 7499
put testvar.ilk
-- #integer
put testvar.float
-- 7499.0000
put testvar.string
-- "7499"
put testvar.list
-- [7499]
testvar = "Hase"
put testvar.ilk
-- #string
put testvar.integer
-- <Void>
put testvar.symbol
-- #Hase
put testvar.list
-- ["Hase"]

Gerd Gillmaier





Directorworkshop.de ist © Joachim Gola & Gerd Gillmaier 1998-2002. Alle Rechte vorbehalten.