Qual é a ordem de precedência do operador no Visual Basic 6.0?
-
09-06-2019 - |
Pergunta
Qual é a ordem de precedência do operador no Visual Basic 6.0 (VB6)?
Em particular, para os operadores lógicos.
Solução
Ordem de precedência de operações aritméticas
^
-
(negação unária)*
,/
\
Mod
+
,-
(adição/subtração binária)&
Ordem de precedência da operação de comparação
=
<>
<
>
<=
>=
Like
,Is
Ordem de precedência de operação lógica
Not
And
Or
Xor
Eqv
Imp
Fonte: Sams ensina-se Visual Basic 6 em 24 horas - Apêndice A:operador precedente
Outras dicas
Depende se você está ou não no depurador. Realmente. Bem, mais ou menos.
Os parênteses vêm primeiro, é claro.Depois aritmética (+,-,*,/, etc).Depois comparações (>, <, =, etc).Depois os operadores lógicos.O truque é que a ordem de execução dentro de um determinado nível de precedência não está definida.Dada a seguinte expressão:
If A < B And B < C Then
você está garantido o <
operadores de desigualdade serão avaliados antes do lógico And
comparação.Mas não há garantia de qual comparação de desigualdade será executada primeiro.
IIRC, o depurador é executado da esquerda para a direita, mas o aplicativo compilado é executado da direita para a esquerda. Eu poderia tê-los invertidos (já faz muito tempo), mas o importante é que são diferentes.A precedência real não muda, mas a ordem de execução pode.
Use parênteses
EDITAR:Esse é o meu conselho para o novo código!Mas Oscar está lendo o código de outra pessoa, então precisa descobrir de alguma forma.Sugiro o tópico do manual VB6 operador precedente.Infelizmente este tópico não parece estar no Manual on-line MSDN VB6, então colarei as informações do operador lógico aqui.Se você instalou a ajuda do VB6 (a biblioteca MSDN), você a terá em sua máquina.
Os operadores lógicos são avaliados na seguinte ordem de precedência:
Not And Or Xor Eqv Imp
O tópico também explica a precedência para operadores de comparação e aritméticos.
Eu sugeriria que, depois de descobrir a precedência, você colocasse parênteses, a menos que haja um bom motivo para não editar o código.