MteEVAL é uma biblioteca para compilar e avaliar expressões em tempo de execução. As expressões são convertidas em bytecode e executadas sob demanda com uma máquina virtual simples.
Existem quatro edições da biblioteca: Android (B4A), iOS (B4i), Java (B4J), JavaS2 (B4A/B4J).
JavaS2 é nossa edição de desempenho de estágio 2 da biblioteca em Java nativo.
Consulte Anywhere Software para saber mais sobre as ferramentas de desenvolvimento de plataforma cruzada B4A, B4i e B4J.
A criação de expressões em tempo de execução é uma ferramenta poderosa que permite que cálculos e fluxo do programa sejam modificados após a instalação, o que de outra forma exigiria uma atualização física ou uma construção personalizada de um aplicativo. Por exemplo, qualquer aplicativo projetado para gerenciar um plano de remuneração de vendas poderia se beneficiar de expressões de tempo de execução, onde o usuário final pode querer personalizar as fórmulas do plano por membros da equipe, combinações de produtos e metas de vendas.
MteEVAL implementa uma única classe chamada Codeblock. O bloco de código do MteEVAL adota a sintaxe do venerável compilador xBase Clipper 5 dos anos 90, onde a construção começou. Os blocos de código começam com uma chave de abertura, seguida por uma lista de parâmetros opcionais entre pipes, depois a expressão e terminam com uma chave de fechamento.
{| < parameters > | < expression > }Você só precisa compilar um Codeblock uma vez. Uma vez compilado, você pode avaliá-lo quantas vezes forem necessárias, ao mesmo tempo em que fornece argumentos diferentes.
Exemplo 1: Codeblock sem parâmetros
Dim cb as Codeblock
cb.Initialize
cb.Compile( "{||5 + 3}" )
Result = cb.Eval 'Result=8Exemplo 2: Codeblock com parâmetros
Dim cb as Codeblock
cb.Initialize
cb.Compile( "{|length,width|length*width}" )
Area = cb.Eval2( Array( 3 , 17 ) ) 'Area=51Ao avaliar um Codeblock com parâmetros, use o método Eval2.
Exemplo 3: Compilação, avaliação e repetição do Codeblock
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 A biblioteca oferece suporte a operadores de estilo C/Java junto com uma lista crescente de funções nativas B4X.