Priorita operátorů v jazyce Visual Basic

Pokud ve výrazu dojde k několika operacím, každá část se vyhodnotí a přehodnotí v předem určeném pořadí nazývaném priorita operátoru.

Pravidla priority

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

  • Operátory aritmetického a zřetězení mají pořadí, které je popsáno v následující části, a všechny mají vyšší prioritu než relační, logické a bitové operátory.

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

  • Logické a bitové operátory mají pořadí priorit popsané 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 ve výrazu zobrazují.

Pořadí priorit

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

Await – operátor

Čekají

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

Umocnění ( ^ )

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ý posun bitu ( << , >> )

Operátory porovnání

Všechny operátory porovnání ( = , , , , , , , , <> , , ... < <= > >= Is IsNot Like TypeOf Is )

Logické a bitové operátory

Negace ( Not )

Konjunkce ( And , AndAlso )

Inkluzivní disjunkce ( Or , OrElse )

Výhradní disjunkce ( Xor )

Komentáře

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

Operátor zřetězení řetězců ( ) není aritmetický operátor, ale je seskupován s aritmetickými & operátory.

Operátory Is IsNot a jsou operátory porovnání odkazů na objekty. Neporovnává hodnoty dvou objektů. Zkontrolují pouze, jestli dvě proměnné objektu odkazují na stejnou instanci objektu.

Asociativita

Když se ve výrazu zobrazí operátory se stejnou prioritou, například násobení a dělení, kompilátor vyhodnotí každou operaci tak, jak ji 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 výsledek tři. Vzhledem k tomu, že kompilátor vyhodnocuje operace pro zleva doprava, je vyhodnocení stejné, pokud je toto pořadí n1 explicitně označeno pro n2 . Oba n1 typy a mají výsledek n2 tři. Naproti tomu má výsledek 48, protože závorky vynutí, aby kompilátor nejprve vyhodnotil n3 hodnotu 8/4.

Kvůli tomuto chování jsou operátory v tomto chování asociativní Visual Basic.

Přepsání priority a asociativita

Pomocí závorek můžete vynutit vyhodnocení některých částí výrazu před ostatními. To může přepsat pořadí priority i asociativitu vlevo. Visual Basic vždy provádí operace, které jsou uzavřeny v závorkách před těmi, kdo jsou mimo. V závorkách ale zachovává běžnou prioritu a asociativitu, pokud v závorkách nepoužívejte 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é