Pregunta MUY interesante.
La función Evaluate en mi opinión es una de las funciones mas poderosas y menos usadas de Clarión.
Esta función permite EVALUAR cualquier expresión y devuelve el resultado de esa evaluación en un String o sea en una cadena de caracteres.
En caso de que la expresión no pueda ser evaluada se generará un mensaje de error en el runtime de Clarion.
Supongamos que en tu código colocas la siguiente instrucción :
A# = Evaluate('5 = 2 + algo')
Suponiendo que la expresión "algo" no está definida en el programa, esta expresión, es una expresión que por lógica no puede ser evaluada. En este caso la función Error() te regresará un mensaje de error.
Ahora bien en el siguiente ejemplo :
A# = Evaluate('1 = 2')
No te regresará mensaje de error ya que el programa aquí podrá elavuar la expresión de comparación si 1 es igual a 2 y como resultado de esta evaluación A# obtedrá un valor "0" que significa "false" o sea que 1 no es igual 2.
Las expresiones puden ser de cualquie tipo, siempre y cuando cumpla con las reglas de programación de Clarion y su evaluación regrese algun valor.
Un ejemplo prático.
Supongamos que se tiene un Browse y que se desee que el usuario cambie los criterios por los cuales se modifique el filtro a aplicar en este Browse.
En alguna parte de la ventana el usuario debera poder capturar la expresión del filtro para luego "Evaluar" si la expresión es correcta y así poder aplicar dicho criterio. Esto quedaría más o menos asi.
FILTRO String(80)
.
.
ENTRY(@S80),AT(20,0,20,20),USE(FILTRO)
.
.
A# = Evaluate(FILTRO)
If Error()
Message('Expresión del filtro incorrecta')
Clear(FILTRO)
Select(?Filtro)
Else
?Browse{Prop:Filter} = FILTRO
End
Otro ejemplo sencilo será por ejemplo el evaluar una expresión de un cálculo aritemético:
Operacion = '(3*2)+5'
A# = Evaluate(Operacion)
Message(A#)
Lo cual nos desplegará el valor 11
Otro puede ser evaluar una expresión lógica:
Message(Evaluate('5<1'))
Lo cual nos desplegará un valor "0" que quiere decir falso.
En conclusión la versatilidad de esta función es tan amplia como el uso que se le desee dar.
Espero sea útil esta explicación.