sexta-feira, 11 de novembro de 2011

Expression

O próprio nome já diz que é coisa boa, parece até nome de carro chique. Alias, me desculpem os proprietários só estou falando do nome, mas tem carro com nome bem estranho por ai, movimento iniciado pela Besta, veja bem, Tiida é nome pra carro? Cerato? Enfim, como diria, gosto é gosto e não devemos discutir.

Voltemos a Expression, que, aliás, é o que nos interessa, considerando ser um dos recursos que nos remetem a flexibilização e parametrização de sistemas, assunto importante e que merece destaque em qualquer projeto. Quem não tem um daqueles usuários bem chatos que vivem pedindo para se alterar a formulas de calcular de certo imposto, não é mesmo?

Tipo Expression

Esse tipo Genexus é algo que merece respeito, visto que permite avaliar expressões aritméticas e lógicas registradas em formato texto. Entre outras palavras, se temos uma expressão: a + b / 2, então podemos fazer com que o valor obtido pela sua execução seja calculado por Expression , claro, desde que se forneçam os valores para a e b.

Algo do tipo, se a=1, b=10, então o valor resultante de a + b / 2 será 6. Não entendeu, o valor é diferente daquele que você chegaria? Isso acontece porque Expression também trata a hierarquia de operadores, primeiro realiza-se a divisão e depois a soma.

Como Funciona?

Simples, cria-se uma variável do tipo Expression e em seguida, realizam-se três operações fundamentais:

  1. Define-se a expressão a ser calculada
  2. Substitui-se os valores das variáveis na expressão
  3. Executa-se o calculo da mesma
Como exemplo, recorramos ao mesmo a + b / 2.

Event Start
   &expressao = 'a + b / 2'
EndEvent

Para permitir registrar expressões livres programamos uma variável &expressao que será manipulável na interface.


Portanto, criamos duas variáveis &a e &b para terem seus valores alteraveis. Para a execução da expressão, um botão ENTER.

Event Enter
   &expression.Expression = &expressao

   &expression.Variables.Set('a', &a)
   &expression.Variables.Set('b', &b)

   &resultado = &expression.Evaluate().ToString()
EndEvent

Simples, hein, define-se a expressão, substitui-se os valores com o método Variables, e finalmente Evaluate() para gerar o resultado.

Recursos
E quanto aos recursos, bem vem com Air-bag, freios ABS, ar-condicionado Digital, ...,  ou melhor, quanto aos operadores, é possível não apenas os operadores tradicionais ( + - * / ), mas também operadores lógicos e relacionais ( < <= > >= <> and or), mesmo porque é possível definir uma operação tipo if, ou melhor iif.

   iif( condicao , valor, valor)

Tudo isso, além das funções predefinidas, tais como tan() cos() pow() sqrt(), entre outras, que eu recomendo consultar o manual do proprietário para maiores informações.

Ah, e antes que eu me esqueça, também é possível o uso de parenteses na expressão, para resolver situações de hierarquia.

Vamos a um exemplo com iif.

Event Start
   &expressao = 'iif(a + b / 2 > 0, a + b / 2 , 0)'
EndEvent

Muito bem, se quiser fazer um test-drive recomendo abrir o Gx e começar, pois verá que o desempenho é ótimo, os recursos ilimitados, e claro, a solução final digna dos Rolls Royce, ou do Galaxy para os brasileiros mais antigos.

Ah, o endereço da concenssionária é http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Expression+Data+Type,