Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Lorsque plusieurs opérations se produisent dans une expression, chaque partie est évaluée et résolue dans un ordre prédéterminé appelé priorité de l’opérateur.
Règles de précédence
Lorsque les expressions contiennent des opérateurs de plusieurs catégories, elles sont évaluées en fonction des règles suivantes :
Les opérateurs arithmétiques et concaténation ont l’ordre de priorité décrit dans la section suivante, et tous ont une priorité supérieure à celle des opérateurs de comparaison, logiques et de bits.
Tous les opérateurs de comparaison ont une priorité égale, et tous ont une priorité supérieure aux opérateurs logiques et au niveau du bit, mais la priorité inférieure aux opérateurs arithmétiques et de concaténation.
Les opérateurs logiques et au niveau du bit ont l’ordre de priorité décrit dans la section suivante, et tous ont une priorité inférieure aux opérateurs arithmétiques, concaténation et comparaison.
Les opérateurs ayant une priorité égale sont évalués de gauche à droite dans l’ordre dans lequel ils apparaissent dans l’expression.
Ordre de précédence
Les opérateurs sont évalués dans l’ordre de priorité suivant :
Await, opérateur
Attendre
Opérateurs arithmétiques et concaténation
Exponentiation (^
)
Identité unaire et négation (+
, –
)
Multiplication et division à virgule flottante (*
, /
)
Division entière (\
)
Arithmétique modulaire (Mod
)
Addition et soustraction (+
, –
)
Concaténation de chaînes (&
)
Décalage de bits arithmétique (<<
, >>
)
Opérateurs de comparaison
Tous les opérateurs de comparaison (=
, , <>
, <
<=
, Is
IsNot
>=
Like
>
, , ...)Is
TypeOf
Opérateurs de bits et opérateurs logiques
Négation (Not
)
Conjonction (And
, AndAlso
)
Disjonction inclusive (Or
, OrElse
)
Disjonction exclusive (Xor
)
Commentaires
L’opérateur =
est uniquement l’opérateur de comparaison d’égalité, et non l’opérateur d’affectation.
L’opérateur de concaténation de chaîne (&
) n’est pas un opérateur arithmétique, mais il est regroupé avec les opérateurs arithmétiques.
Les Is
opérateurs et IsNot
les opérateurs sont des opérateurs de comparaison de référence d’objet. Ils ne comparent pas les valeurs de deux objets ; ils vérifient uniquement si deux variables d’objet font référence à la même instance d’objet.
Associativité
Lorsque les opérateurs de priorité égale apparaissent ensemble dans une expression, par exemple la multiplication et la division, le compilateur évalue chaque opération lorsqu’il le rencontre de gauche à droite. L’exemple suivant illustre cela.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
La première expression évalue la division 96 / 8 (ce qui entraîne 12) puis la division 12 / 4, ce qui entraîne trois. Étant donné que le compilateur évalue les opérations de n1
gauche à droite, l’évaluation est la même lorsque cet ordre est explicitement indiqué pour n2
. Les deux n1
et n2
ont un résultat de trois. En revanche, n3
a un résultat de 48, car les parenthèses forcent le compilateur à évaluer 8 / 4 en premier.
En raison de ce comportement, les opérateurs sont dits être associatifs dans Visual Basic.
Substitution de la priorité et de l’associativité
Vous pouvez utiliser des parenthèses pour forcer l’évaluation de certaines parties d’une expression avant d’autres. Cela peut remplacer l’ordre de priorité et l’associativité gauche. Visual Basic effectue toujours des opérations placées entre parenthèses avant celles extérieures. Toutefois, entre parenthèses, elle conserve la priorité et l’associativité ordinaires, sauf si vous utilisez des parenthèses entre parenthèses. L’exemple suivant illustre cela.
Dim a, b, c, d, e, f, g As Double
a = 8.0
b = 3.0
c = 4.0
d = 2.0
e = 1.0
f = a - b + c / d * e
' The preceding line sets f to 7.0. Because of natural operator
' precedence and associativity, it is exactly equivalent to the
' following line.
f = (a - b) + ((c / d) * e)
' The following line overrides the natural operator precedence
' and left associativity.
g = (a - (b + c)) / (d * e)
' The preceding line sets g to 0.5.