Kolejność wykonywania działań (Visual Basic)
W przypadku wystąpienia kilku operacji w wyrażeniu każda część jest obliczana i rozpoznawana w wstępnie określonej kolejności o nazwie pierwszeństwo operatora.
Reguły pierwszeństwa
Gdy wyrażenia zawierają operatory z więcej niż jednej kategorii, są oceniane zgodnie z następującymi regułami:
Operatory arytmetyczne i łączenia mają kolejność pierwszeństwa opisaną w poniższej sekcji, a wszystkie mają większy pierwszeństwo niż operatory porównania, logiczne i bitowe.
Wszystkie operatory porównania mają równe pierwszeństwo, a wszystkie mają większy pierwszeństwo niż operatory logiczne i bitowe, ale niższe pierwszeństwo niż operatory arytmetyczne i łączenia.
Operatory logiczne i bitowe mają kolejność pierwszeństwa opisaną w poniższej sekcji, a wszystkie mają niższy priorytet niż arytmetyka, łączenie i operatory porównania.
Operatory o równym pierwszeństwie są obliczane od lewej do prawej w kolejności, w której są wyświetlane w wyrażeniu.
Kolejność pierwszeństwa
Operatory są oceniane w następującej kolejności pierwszeństwa:
Await — Operator
Await
Operatory arytmetyczne i współbieżne
Wykładnik (^
)
Tożsamość jednoargumentowa i negacja (+
, –
)
Mnożenie i dzielenie zmiennoprzecinkowe (*
, /
)
Dzielenie całkowite (\
)
Arytmetyka modułowa (Mod
)
Dodawanie i odejmowanie (+
, –
)
Łączenie ciągów (&
)
Przesunięcie bitowe arytmetyczne (<<
, >>
)
Operatory porównania
Wszystkie operatory porównania (=
, <>
, <=
>=
<
>
Is
, IsNot
, , Like
...) TypeOf
Is
Operatory logiczne i bitowe
Negacja (Not
)
Połączenie (And
, AndAlso
)
Rozłączenie inkluzywne (Or
, OrElse
)
Wyłączny rozsyłanie (Xor
)
Komentarze
Operator =
jest tylko operatorem porównania równości, a nie operatorem przypisania.
Operator łączenia ciągów (&
) nie jest operatorem arytmetycznym, ale w pierwszeństwie jest grupowany z operatorami arytmetycznymi.
Operatory Is
i IsNot
to operatory porównania odwołań do obiektów. Nie porównują one wartości dwóch obiektów; sprawdzają tylko, czy dwie zmienne obiektu odwołują się do tego samego wystąpienia obiektu.
Łączność
Gdy operatory o równym pierwszeństwie pojawiają się razem w wyrażeniu, na przykład mnożenie i dzielenie, kompilator ocenia każdą operację, gdy napotka ją od lewej do prawej. Ilustruje to poniższy przykład.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
Pierwsze wyrażenie oblicza podział 96 / 8 (co powoduje 12), a następnie podział 12 / 4, co powoduje trzy. Ponieważ kompilator ocenia operacje n1
od lewej do prawej, ocena jest taka sama, gdy ta kolejność jest jawnie wskazana dla elementu n2
. Oba n1
i n2
mają wynik trzech. Z kolei n3
wynik ma wartość 48, ponieważ nawiasy wymuszają, aby kompilator oceniał wartość 8 /4 jako pierwszy.
Ze względu na to zachowanie, operatory są mówi się, że pozostają asocjacyjne w Visual Basic.
Zastępowanie pierwszeństwa i asocjacji
Nawiasy umożliwiają wymuszenie oceny niektórych części wyrażenia przed innymi. Może to zastąpić zarówno kolejność pierwszeństwa, jak i lewej asocjacji. Visual Basic zawsze wykonuje operacje ujęte w nawiasy przed tymi zewnętrznymi. Jednak w nawiasach zachowuje zwykły pierwszeństwo i kojarzenie, chyba że w nawiasach są używane nawiasy. Ilustruje to poniższy przykład.
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.