Sdílet prostřednictvím


Priorita operátorů v jazyce Visual Basic

Pokud ve výrazu dojde k několika operacím, každá část se vyhodnotí a vyřeší v předem určeném pořadí s názvem priority operátoru.

Pravidla priority

Pokud výrazy obsahují operátory z více než jedné kategorie, vyhodnotí se podle následujících pravidel:

  • Aritmetické operátory a operátory zřetězení mají pořadí priorit popsaných v následující části a všechny mají větší prioritu než porovnávací, logické a bitové operátory.

  • Všechny relační operátory mají stejnou prioritu a všechny mají větší prioritu než logické a bitové operátory, ale mají nižší prioritu než aritmetické a zřetězení.

  • Logické a bitové operátory mají pořadí priorit popsaných v následující části a všechny mají nižší prioritu než aritmetické, zřetězení a relační operátory.

  • Operátory se stejnou prioritou se vyhodnocují zleva doprava v pořadí, ve kterém se zobrazují ve výrazu.

Pořadí priorit

Operátory se vyhodnocují v následujícím pořadí priorit:

Await – operátor

Čekají

Aritmetické operátory a operátory zřetězení

Exponentiation (^)

Unární identita a negace (+, )

Násobení a dělení s plovoucí desetinnou čárkou (*, /)

Celočíselné dělení (\)

Modulární aritmetika (Mod)

Sčítání a odčítání (+, )

Zřetězení řetězců (&)

Aritmetický bitový posun (<<, >>)

Operátory porovnání

Všechny relační operátory (=, <>, <, >=>Is<=, LikeIsNot...) TypeOfIs

Logické a bitové operátory

Negace (Not)

Spojení (And, AndAlso)

Inkluzivní disjunkce (Or, OrElse)

Výhradní disjunkce (Xor)

Komentáře

Operátor = je pouze relační operátor rovnosti, nikoli operátor přiřazení.

Operátor zřetězení řetězce (&) není aritmetický operátor, ale v prioritě je seskupený s aritmetickými operátory.

Operátory Is jsou IsNot relačními operátory odkazu na objekty. Nerovnají hodnoty dvou objektů; kontrolují pouze to, zda dvě proměnné objektu odkazují na stejnou instanci objektu.

Asociativita

Když se operátory se stejnou prioritou se zobrazí ve výrazu, například násobení a dělení, kompilátor vyhodnocuje každou operaci tak, jak na ni narazí zleva doprava. Toto dokládá následující příklad.

Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)

První výraz vyhodnotí dělení 96 / 8 (výsledkem je 12) a pak dělení 12 / 4, což má za následek tři. Vzhledem k tomu, že kompilátor vyhodnocuje operace zleva n1 doprava, vyhodnocení je stejné, když je toto pořadí explicitně uvedeno pro n2. Oba n1 a n2 mají výsledek ze tří. Naproti tomu n3 má výsledek 48, protože závorky vynucují kompilátoru vyhodnocení 8 / 4 jako první.

Kvůli tomuto chování se říká, že operátory jsou ponechány asociativní v jazyce Visual Basic.

Přepsání priority a asociativity

Pomocí závorek můžete vynutit vyhodnocení některých částí výrazu před ostatními. To může přepsat pořadí priorit i asociativitu vlevo. Visual Basic vždy provádí operace, které jsou uzavřeny v závorkách před těmi mimo. V závorkách však udržuje běžnou prioritu a asociativitu, pokud v závorkách nepoužíváte závorky. Toto dokládá následující příklad.

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.

Viz také