Lade...
 

CX_FORMULA - Funktionen

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_VALUE
    sinh(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.