Variablen
Variablen einer Formel können beliebige Zugriffsausdrücke sein.
Dynamische Datenfelder kommen sehr oft als Variablen in Formeln vor und werden deshalb intern besonders behandelt, d.h. die Repräsentation und Bindung an Objekte im PlugSpace sind effektiver als im allgemeinen Fall.
Vor der Berechnung des Formelwerts werden die Variablen gebunden, d.h. es wird festgelegt, auf welche Datenfelder welcher Objekte sie verweisen.
Beim Binden der Variablen (und der externen Funktionen) wird jedes im PlugSpace registrierte Objekt auf die Existenz des entsprechenden Datenfelds getestet, und wenn es existiert, bezeichnet die Variable der Formel während der Berechnung genau dieses Datenfeld.
Die Reihenfolge der Objekte im PlugSpace ist wichtig, da eine Variable mit verschiedenen Objekte gebunden werden könnte.
Es gibt zwei Bindungsmodi: eng bzw. locker. Enge Bindung kann nur mittels der Funktionen get und has gefordert werden, d.h. der Normalfall ist die lockere Bindung und für die viele Objekte besteht auch kein Unterschied zwischen beiden Modi - Ausnahme: Objekte der Klasse CX_ITEM.
Den Zusammenhang zwischen Operanden im Formelausdruck, Bindungsmodus und den virtuellen Funktionen, mittels deren eine Klasse ein eigenes Verhalten bei der Variablenbindung definieren kann, zeigt folgende Tabelle:
Modus | Variable x als Operand | Test auf Existenz der Variablen x | dyn. Datenfeld wird gebunden mit | Zugriffsausdruck wird gebunden mit |
---|---|---|---|---|
locker | x | available(x) | PlugDataField2() | PlugDataField() |
eng | get(x) | has(x) | GetDataField2() | GetDataField() |
Lokale Variablen
Lange komplizierte Formelausdrücke möchte man in Teil-Terme aufspalten. Dazu benötigt man lokale Variable.
Lokale Variable werden mit
local name1, name2, ..., namen;
vereinbart. Einer lokalen Variablen muss mit dem Assignment-Operator := ein Wert zugewiesen werden, bevor sie als Operand in einem anderen Zusammenhang auftreten darf.
Beispiele:
Parameter | Beispiele | Beschreibung |
---|---|---|
Dynamisches Datenfeld (Slot) | net.weight + 7.5g | Name des dynamischen Datenfelds (auch mit Specifier). |
Zugriffsausdruck |
|
Zugriff auf ein bestimmtes Datenfeld |
lokale Variablen | local t1, t2; t1 := sin(x); t2 := cos(x); t1 * t1 - t2 * t2 |
berechnet sin2(x) - cos2(x). Während sich die Variable x auf ein Datenfeld eines Objekts bezieht, sind t1 und t2 nur lokale Hilfsvariablen |
Auf der rechten Seite des Zuweisungsoperators sind alle Ausdrücke erlaubt, die einen Wert liefern (also auch eine Zuweisung selbst).
Alle syntaktisch möglichen Ausdrücke findet man in der Grammatikdefinition in der Regel expression.