Funktionen
Funktionen (= Methoden eines Objekts) können innerhalb eines Formelausdrucks auf zwei verschiedene Weisen aufgerufen werden:
- interne Funktion: Es gibt mindestens einen Parameter - und die Funktion ist eine Methode des Objekts, das als Parameter übergeben wird.
- externe Funktion: Die Funktion ist eine Methode eines externen Objekts. Die Zuordnung zum Objekt (im PlugSpace) erfolgt bei der Bindung der Variablen.
Beispiel:
Formelausdruck | Äquivalent in C++ | Bemerkung |
---|---|---|
sin(x) | x.sin() | Interne Funktion: Bei einer Funktion mit Parametern gilt die Annahme, das es sich um eine Methode des ersten Parameters handelt |
pow(x, n) | x.pow(n) | Interne Funktion: Bei einer Funktion mit Parametern gilt die Annahme, das es sich um eine Methode des ersten Parameters handelt |
Foo() | object.Foo() | Externe Funktion: object bezeichnet das erste im PlugSpace gefundene Objekt, das die Methode Foo() besitzt. Funktionen ohne Parameter werden immer so behandelt als wäre ein :: vorangestellt. |
::Bar(z) | object.Bar(z) | Externe Funktion: object bezeichnet das erste im PlugSpace gefundene, das die Methode Bar() besitzt. Der Scope-Operator :: ist hier nötig, um eine Unterscheidung zum Aufruf einer internen Funktion (s.o.) zu machen |
Um den Unterschied zwischen internen und externen Funktionen zu verdeutlichen hier nochmal ein Beispiel, wie sin(1) als interne und als externe Funktion aufgerufen werden kann:
// Internal call: CreateTransObject(CX_FORMULA) "sin(1.0)" Over Put Call(Evaluate) // -> 0.8414709 // External call: [ 1.0 ] PlugSpace CreateTransObject(CX_FORMULA) "::sin()" Over Put Call(Evaluate) // -> 0.8414709 // Or without "::" because there is only 1 parameter [ 1.0 ] PlugSpace CreateTransObject(CX_FORMULA) "sin()" Over Put Call(Evaluate) // -> 0.8414709
Folgende arithmetische Funktionen, die als Argument(e) reelle oder dimensionsbehaftete Zahlen (Klasse CX_NUMERIC oder CX_VALUE) erwarten, können in einer Formel aufgerufen werden:
- trigonometrische Funktionen
Voraussetzung bei CX_VALUE sin(x) sin x ° oder dimensionslos cos(x) cos x tan(x) tan x cot(x) 1 / tan(x) arcsin(x) arcsin x dimensionslos arccos(x) arccos x arctan(x) arctan x arc(x) x * 3.1415926535 / 180.0 Hierbei wird ein dimensionsloser Parameter als Bogenmaßangabe interpretiert. Auch der dimensionslose Rückgabewert der Arcus-Funktionen (arc...()) sind Angaben im Bogenmaß.
Soll der Rückgabewert einer Arcusfunktion in eine Gradangabe gewandelt werden, so ist er mit dem Faktor (180.0°/3.1415926535) zu multiplizieren. Die umgekehrte Transformation (Grad in Bogenmaß) wird von der Funktion arc() geleistet. - hyperbolische Funktionen
Voraussetzung
bei CX_VALUEsinh(x) (ex - e-x) dimensionslos cosh(x) (ex + e-x) tanh(x) (ex - e-x) / (ex + e-x) - sonstige
Voraussetzung bei CX_VALUE log(x) log10 x dimensionslos ln(x) ln x exp(x) ex sqrt(x) √x Dimension ist ein Quadrat von Dimensionen pow(x, n) xn Exponent n ist dimensionslose ganze Zahl, n < 0 ist erlaubt
min(a, b) if (a < b) a else b max(a, b) if (a > b) a else b floor(x) größte ganze Zahl < x ceil(x) kleinste ganze Zahl > x round(x, n) x nach n-ter Stelle runden truncate(x, n) x nach n-ter Stelle ungerundet "abschneiden" string(x, f) x als Zeichenkette formatieren; die Flags f steuern die Darstellung
Klasse CX_FORMULA - spezielle Funktionen im Formelausdruck
- has(variable)
testet, ob die als Parameter angegebene Variable (d.h. ein dynamisches Datenfeld oder ein Zugriffsausdruck) gebunden ist, wobei die Variable eng gebunden wird (siehe Funktion get) - available(variable)
testet, ob die als Parameter angegebene Variable (d.h. ein dynamisches Datenfeld oder ein Zugriffsausdruck) gebunden ist. Im Gegensatz zu has(...) wird die Variable locker gebunden (der Normalfall). - get(variable)
fordert, dass die Variable fest gebunden wird. - type(variable)
liefert den Typ einer Variablen. Das Ergebnis kann mit einer Typkonstanten verglichen werden. - inherited(variable, typKonstante)
testet, ob das mit Variable bezeichnetet Objekt von der mit dem zweiten Parameter bezeichneten Klasse abgeleitet ist. Der Name einer Klasse kann als Parameter angegeben werden (Typkonstante) - var(name)
liefert den Wert einer InstantView®-Variablen, deren Name als Parameter anzugeben ist. var(...) kann auch am Anfang eines Zugriffsausdrucks stehen.