Priorité des opérateurs en Visual Basic
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é des opérateurs.
Règles de précédence
Lorsque des expressions contiennent des opérateurs appartenant à plus d'une catégorie, elles sont évaluées selon les règles suivantes :
Les opérateurs arithmétiques et de concaténation ont l'ordre de priorité décrit dans la section suivante, et ont tous une priorité plus grande que les opérateurs de comparaison, logiques et au niveau du bit.
Tous les opérateurs de comparaison ont une priorité égale, et tous ont une priorité supérieure aux opérateurs au niveau du bit et logiques, mais 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, de concaténation et de 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 priorité
Les opérateurs sont évalués dans l’ordre de priorité suivant :
Await, opérateur
Attendre
Opérateurs arithmétiques et de concaténation
Élévation à la puissance (^
)
Identité unaire et négation (+
, –
)
Multiplication et division à virgule flottante (*
, /
)
Division d'entier (\
)
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
, TypeOf
...Is
)
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’assignation.
L'opérateur de concaténation de chaînes de caractères (&
) n'est pas un opérateur arithmétique, mais il est regroupé avec les opérateurs arithmétiques en termes de préséance.
Les opérateurs Is
et IsNot
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 des opérateurs de priorité égale apparaissent ensemble dans une expression, par exemple la multiplication et la division, le compilateur évalue chaque opération au fur et à mesure qu'il la rencontre, de gauche à droite. L'exemple suivant illustre ce comportement.
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 (qui donne 12), puis la division 12 / 4, qui donne trois. Étant donné que le compilateur évalue les opérations pour n1
de gauche à droite, l’évaluation est la même lorsque cet ordre est explicitement indiqué pour n2
. n1
et n2
ont tous deux 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 associatifs sur leur gauche 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 les opérations entre parenthèses avant celles qui se trouvent à l'extérieur. Toutefois, entre parenthèses, il conserve la priorité et l’associativité ordinaires, sauf si vous utilisez des parenthèses à l'intérieur des parenthèses. L'exemple suivant illustre ce comportement.
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.