Lade...
 

CX_FORMULA - Variablen

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
predecessors[2].personInCharge != personInCharge
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.