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
<=
, Like
IsNot
...) TypeOf
Is
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.