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...) TypeOfIs

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.

Zobacz też