Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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. Vyšší priorita znamená, že se tyto operátory vyhodnocují jako první.
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. Operátory uvedené jako první mají vyšší prioritu a vyhodnocují se před operátory uvedenými později:
1. Operátor Await
Očekávat
2. 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 (<<, >>)
3. Relační operátory
Všechny relační operátory (=, <>, <, <=>>=Is, IsNotLike...) TypeOfIs
4. 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.
Asociativnost
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. Následující příklad to ilustruje.
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. Následující příklad to ilustruje.
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. Division and multiplication (/, *) have higher
' precedence than addition and subtraction (+, -), so c / d * e
' is evaluated first, then the addition and subtraction from left to right.
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.