# Evaluación de expresiones lógicas

**URL:** <https://foros.velneo.com/t/evaluacion-de-expresiones-logicas/7208>\
**Category:** Velneo\
**Created:** [8 Julio, 2014 08:12 UTC](https://foros.velneo.com/t/evaluacion-de-expresiones-logicas/7208 "2014-07-08T08:12:05Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![gontorre](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/gontorre/32/5728_2.png) [@gontorre](https://foros.velneo.com/u/gontorre)\
**Post date:** [8 Julio, 2014 08:12 UTC](https://foros.velneo.com/t/evaluacion-de-expresiones-logicas/7208/1 "2014-07-08T08:12:05Z")

</div>

Buenos días

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?

Un saludo

---

<div class="post-metadata">

**Author:** ![velavisual1](https://avatars.discourse-cdn.com/v4/letter/v/dbc845/32.png) [@velavisual1](https://foros.velneo.com/u/velavisual1)\
**Post date:** [8 Julio, 2014 08:46 UTC](https://foros.velneo.com/t/evaluacion-de-expresiones-logicas/7208/2 "2014-07-08T08:46:12Z")

</div>

@gontorre

En la documentación sobre [el asistente de fórmulas](http://velneo.es/info_v7_715_es/velneo_vdevelop_v7/proyectos_objetos_y_editores/asistente_de_formulas/), 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.

---

<div class="post-metadata">

**Author:** ![gontorre](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/gontorre/32/5728_2.png) [@gontorre](https://foros.velneo.com/u/gontorre)\
**Post date:** [8 Julio, 2014 09:31 UTC](https://foros.velneo.com/t/evaluacion-de-expresiones-logicas/7208/3 "2014-07-08T09:31:02Z")

</div>

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.

La expresión es:

PEND\_INI\>0 & CANT\_FIN\<CANT\_INI & CANT\_INI-CANT\_FIN\<PEND\_INI

Donde PEND\_INI=0 , CANT\_INI=0 , CANT\_FIN=4 y STOCK=4

Entonces:  
PEND\_INI\>0 --\> 0 \> 0 --\> FALSO  
CANT\_FIN\<CANT\_INI --\> 4 \< 0 --\> FALSO  
CANT\_INI-CANT\_FIN\<PEND\_INI --\> 0-4 \< 0 --\> VERDADERO

FALSO & FALSO & VERDADERO debería ser FALSO

Por lo menos es lo me explicaron cuando estudié lógica. ¿Alguien ha tenido problemas con esto?

---

<div class="post-metadata">

**Author:** ![tic-software](https://avatars.discourse-cdn.com/v4/letter/t/c4cdca/32.png) [@tic-software](https://foros.velneo.com/u/tic-software)\
**Post date:** [8 Julio, 2014 11:05 UTC](https://foros.velneo.com/t/evaluacion-de-expresiones-logicas/7208/4 "2014-07-08T11:05:42Z")

</div>

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.

Un saludo.

---

<div class="post-metadata">

**Author:** ![gontorre](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/gontorre/32/5728_2.png) [@gontorre](https://foros.velneo.com/u/gontorre)\
**Post date:** [8 Julio, 2014 11:41 UTC](https://foros.velneo.com/t/evaluacion-de-expresiones-logicas/7208/5 "2014-07-08T11:41:20Z")

</div>

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:

PEND\_INI\>(0 & CANT\_FIN\<CANT\_INI & CANT\_INI-CANT\_FIN\<PEND\_INI)

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.

Gracias por la ayuda

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [8 Julio, 2014 20:46 UTC](https://foros.velneo.com/t/evaluacion-de-expresiones-logicas/7208/6 "2014-07-08T20:46:00Z")

</div>

Hola gontorre.

Este es uno de los temas en el que tendrás que cambiar radicalmente los conceptos de programación que ya tengas adquiridos.

Como indica Antonio, el editor de fórmulas evalúa las expresiones de izquierda a derecha, no es bueno ni malo, simplemente diferente.  
``

```

así tu expresión última
PEND_INI>0 & CANT_FIN<CANT_INI & CANT_INI-CANT_FIN<PEND_INI
se evaluaría de esta forma
((((((PEND_INI > 0) & CANT_FIN) < CANT_INI) & CANT_INI) - CANT_FIN) < PEND_INI)
1º 2º 3º 4º 5º 6º

```

También ten en cuenta que el editor de fórmulas evalúa las expresiones lógicas como 1 (true) o 0 (false) y por lo tanto podemos evaluar lo siguiente:

((1\<2) + (3\<4) + (5\<6)) = 1 → devuelve 1 → (3 = 1)

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.

Saludos  
Paco Satué
