Estoy volviendome loco con la forma de evaluar las expresiones lógicas en Velneo. Por las pruebas que estoy haciendo la expresión:
PEND_INI>0 & CANT_FIN>CANT_INI
Se comporta de forma distinta a:
(PEND_INI>0) & (CANT_FIN>CANT_INI)
¿Alguien me podría explicar cual es la diferencia?
Además me resulta raro que se evalúe siempre toda la expresión. En el lenguaje que utilizo habitualmente (Foxpro) las expresiones ligadas con AND se dejan de evaluar si la parte izquierda es falsa, ya que si la primera condición es falsa la expresión completa va a ser siempre falsa. De esta forma se ahorra proceso y es muy útil.
¿Se puede proponer esto en algún sitio para que evalúen la posibilidad de añadirlo en una próxima versión?
En la documentación sobre el asistente de fórmulas, al final de la documentación se nos informa de:
NOTA: A la hora de evaluarse una fórmula el orden de precedencia de los operadores es de izquierda a derecha, por lo que debemos usar paréntesis si queremos ajustar el orden de precedencia al estándar de matemáticas u otro.
También dispones de un foro de ideas en el cuál exponer tus ideas y necesidades.
Una de dos: O estoy idiota o esto está mal. Tango una expresión lógica que sólo utiliza AND. En este caso daría lo mismo evaluarla de izquierda a derecha, de derecha a izquierda, con paréntesis o sin ellos. Una expresión lógica con AND es cierta si todos los componentes son ciertos.
Deberías acostumbrarte a usar SIEMPRE paréntesis en cada término de una expresión lógica, es lo normal, no sólo en velneo, en cualquier lenguaje de programación, de esta forma nunca te fallará sea el lenguaje que sea.
En tu caso no sólo hay AND, hay MAYOR QUE y MENOR QUE, que son operadores lógicos también, sabe dios como los está evaluando al no llevar paréntesis.
Con la respuesta de info me doy cuenta de que, efectivamente, los operadores > y < son operadores de comparación y al evaluar de izquierda a derecha se debe estar evaluando algo como:
o algo así, que cualquiera sabe el resultado que da.
Mi problema viene de estar acostumbrado a un lenguaje con precedencia de operadores en los que prácticamente nunca hacen falta paréntesis. ¡Por eso los primeros días con Velneo me parecía que estaba poniendo siempre mal los IF y los repasaba mil veces hasta que de funcionaban! Debe ser que al final de tanto cambiarlos los ponía bien de casualidad. Me tendré que acostumbrar.
Lo de evaluar solo la parte izquierda de una expresión AND (si es 0) no es necesario en Velneo ya que NO es un lenguaje dinámico ni orientado a Objetos.
Por último, recuerda que en el editor de fórmulas puedes evaluar expresiones en tiempo de diseño y te servirá como una buena herramienta de entrenamiento para probar cálculos.