2008-09-10 40 views

Respuesta

13

lógico Operación Precedencia Orden

  1. Not
  2. And
  3. Or
  4. Xor
  5. Eqv
  6. Imp

Comparación Operación Precedencia Orden

  1. =
  2. <>
  3. <
  4. >
  5. <=
  6. >=
  7. Like, Is

aritmética Operación Precedencia Orden

  1. ^
  2. - (negación unaria)
  3. *, /
  4. \
  5. Mod
  6. +, - (binario suma/resta)
  7. &

Fuente:Sams Teach Yourself Visual Basic 6 in 24 Hours — Appendix A: Operator Precedence

+0

¿Cuál es el orden? De menor a mayor? –

+1

La presentación de la respuesta puede ser un poco engañosa. El orden dentro de las tres categorías es el penúltimo, pero el orden de las categorías es el último al primero: en realidad, las operaciones aritméticas se evalúan antes de las operaciones de comparación, que se evalúan antes de las operaciones lógicas. Para una presentación más clara, sugeriría presentar la respuesta poniendo primero operaciones aritméticas, seguidas de operaciones de comparación, seguidas por operaciones lógicas. También es una buena referencia aquí: https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/operator-precedence –

9

Depende de si está o no está en el depurador . Realmente. Bueno, más o menos.

Los paréntesis son lo primero, por supuesto. Luego comparaciones (>, <, =, etc.). Entonces los operadores lógicos. El truco es que el orden de ejecución no está definido.Eso significa Dada la siguiente expresión:

If A < B And B < C Then 

se le garantiza que los operadores < ambos serán ejecutados antes de la lógica y la comparación. Pero no se garantiza qué comparación se ejecutará primero.

IIRC, el depurador se ejecuta de izquierda a derecha, pero la aplicación compilada se ejecuta de derecha a izquierda. Podría tenerlos al revés (ha pasado mucho tiempo), pero lo importante es que son diferentes. Entonces, la precedencia real no cambia, pero el orden de ejecución podría.

+0

Muy pocos idiomas especifican el orden exacto de evaluación en una declaración de este tipo: generalmente los compiladores son dada la libertad de hacerlo de la manera que se considere más eficiente/rápido/seguro/etc. ¡No se debe escribir un código que dependa del orden de ejecución en ningún idioma! –

+0

Si escribiste código que dependía del orden de ejecución en una expresión como esa, ¡te mereces todo lo que obtienes! "Siempre codifica como si la persona que termina manteniendo tu código es un psicópata violento que sabe dónde vives". – MarkJ

+1

Joel, ¿significa esto que una operación de OR no podrá (nunca) omitir el lado derecho si la izquierda se evalúa como verdadera, y lo mismo para AND y falso? – Oskar

2

Usar paréntesis


EDIT: Ese es mi consejo para un código nuevo! Pero Oscar está leyendo el código de otra persona, así que debe resolverlo de alguna manera. Sugiero el tema del manual VB6 Precedencia del operador. Lamentablemente, este tema no parece estar en el MSDN online VB6 manual, por lo que pegaré aquí la información del operador lógico. Si instaló la ayuda de VB6 (la biblioteca de MSDN), la tendrá en su máquina.

Los operadores lógicos se evalúan en el siguiente orden de precedencia:

Not 
And 
Or 
Xor 
Eqv 
Imp 

El tema también explica la precedencia para la comparación y operadores aritméticos.

Sugeriría que una vez que haya descubierto la precendencia, ponga entre paréntesis a menos que haya alguna buena razón para no editar el código.

+2

Una buena opción si no tuviera que leer el código de otra persona ... – Oskar

+0

Ooh, siento tu dolor. He agregado algo más a mi respuesta. La precedencia del operador está en la ayuda de VB6 – MarkJ

+1

+1 para el consejo, ya que sigue siendo un buen consejo. En una nota lateral, no entiendo por qué las personas intentan meter a tantos operadores en una sola línea de código en primer lugar. A veces deseo que se definan los idiomas * no * precedence, de modo que las personas * tuvieran * que usar paréntesis para dejar en claro qué demonios estaban tratando de lograr. Creo que siempre hay Lisp ... –

Cuestiones relacionadas