MteEVAL es una biblioteca para compilar y evaluar expresiones en tiempo de ejecución. Las expresiones se convierten a código de bytes y luego se ejecutan según demanda con una máquina virtual simple.
Hay cuatro ediciones de la biblioteca: Android (B4A), iOS (B4i), Java (B4J), JavaS2 (B4A/B4J).
JavaS2 es nuestra edición de rendimiento de etapa 2 de la biblioteca en Java nativo.
Consulte Anywhere Software para obtener más información sobre las herramientas de desarrollo multiplataforma B4A, B4i y B4J.
La creación de expresiones en tiempo de ejecución es una herramienta poderosa que permite modificar los cálculos y el flujo del programa después de la instalación, lo que de otro modo requeriría una actualización física o una compilación personalizada de una aplicación. Por ejemplo, cualquier aplicación diseñada para gestionar un plan de compensación de ventas podría beneficiarse de las expresiones en tiempo de ejecución, donde el usuario final puede querer personalizar las fórmulas del plan según los miembros del equipo, las combinaciones de productos y los objetivos de ventas.
MteEVAL implementa una única clase llamada Codeblock. El bloque de código de MteEVAL adopta la sintaxis del venerable compilador xBase Clipper 5 de los años 90, donde comenzó la construcción. Los bloques de código comienzan con una llave de apertura, seguida de una lista de parámetros opcional entre tuberías, luego la expresión y terminan con una llave de cierre.
{| < parameters > | < expression > }
Sólo necesitas compilar un Codeblock una vez. Una vez compilado, puedes evaluarlo tantas veces como sea necesario, mientras proporcionas diferentes argumentos.
Ejemplo 1: bloque de código sin parámetros
Dim cb as Codeblock
cb.Initialize
cb.Compile( "{||5 + 3}" )
Result = cb.Eval 'Result=8
Ejemplo 2: bloque de código con parámetros
Dim cb as Codeblock
cb.Initialize
cb.Compile( "{|length,width|length*width}" )
Area = cb.Eval2( Array( 3 , 17 ) ) 'Area=51
Al evaluar un Codeblock con parámetros, utilice el método Eval2.
Ejemplo 3: compilación, evaluación y repetición de bloques de código
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
La biblioteca admite operadores de estilo C/Java junto con una lista cada vez mayor de funciones nativas de B4X.