MteEVAL ist eine Bibliothek zum Kompilieren und Auswerten von Ausdrücken zur Laufzeit. Ausdrücke werden in Bytecode umgewandelt und dann bei Bedarf mit einer einfachen virtuellen Maschine ausgeführt.
Es gibt vier Editionen der Bibliothek: Android (B4A), iOS (B4i), Java (B4J), JavaS2 (B4A/B4J).
JavaS2 ist unsere Performance-Edition der Stufe 2 der Bibliothek in nativem Java.
Weitere Informationen zu den plattformübergreifenden Entwicklungstools B4A, B4i und B4J finden Sie unter Anywhere Software.
Das Erstellen von Ausdrücken zur Laufzeit ist ein leistungsstarkes Tool, mit dem Berechnungen und Programmabläufe nach der Installation geändert werden können, was andernfalls ein physisches Update oder einen benutzerdefinierten Build einer Anwendung erfordern würde. Beispielsweise könnte jede Anwendung, die für die Verwaltung eines Vertriebsvergütungsplans entwickelt wurde, von Laufzeitausdrücken profitieren, bei denen der Endbenutzer die Formeln des Plans möglicherweise nach Teammitgliedern, Produktmischungen und Vertriebszielen anpassen möchte.
MteEVAL implementiert eine einzelne Klasse namens Codeblock. Der Codeblock von MteEVAL übernimmt die Syntax des ehrwürdigen xBase-Compilers Clipper 5 aus den 1990er Jahren, mit dem die Konstruktion begann. Codeblöcke beginnen mit einer offenen Klammer, gefolgt von einer optionalen Parameterliste zwischen Pipes und dem Ausdruck, und enden mit einer schließenden Klammer.
{| < parameters > | < expression > }Sie müssen einen Codeblock nur einmal kompilieren. Nach der Kompilierung können Sie es beliebig oft auswerten und dabei verschiedene Argumente angeben.
Beispiel 1: Codeblock ohne Parameter
Dim cb as Codeblock
cb.Initialize
cb.Compile( "{||5 + 3}" )
Result = cb.Eval 'Result=8Beispiel 2: Codeblock mit Parametern
Dim cb as Codeblock
cb.Initialize
cb.Compile( "{|length,width|length*width}" )
Area = cb.Eval2( Array( 3 , 17 ) ) 'Area=51Wenn Sie einen Codeblock mit Parametern auswerten, verwenden Sie die Eval2-Methode.
Beispiel 3: Codeblock kompilieren, auswerten und wiederholen
Dim cb as Codeblock
cb.Initialize
cb.Compile( "{|sales,r1,r2| r1*sales + iif( sales > 100000, (sales-100000)*r2, 0 ) }" )
Commission1 = cb.Eval2( Array( 152000 , . 08 , . 05 ) ) 'Commission1=14760
Commission2 = cb.Eval2( Array( 186100 , . 08 , . 07 ) ) 'Commission2=20915
Commission3 = cb.Eval2( Array( 320000 , . 08 , . 05 ) ) 'Commission3=36600 Die Bibliothek unterstützt Operatoren im C/Java-Stil sowie eine wachsende Liste nativer B4X-Funktionen.