Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ha egy kifejezésben több művelet is előfordul, minden rész kiértékelése és feloldása előre meghatározott sorrendben történik, úgynevezett operátor-elsőbbségi sorrendben.
Elsőbbségi szabályok
Ha a kifejezések egynél több kategóriából származó operátorokat tartalmaznak, azok kiértékelése a következő szabályok szerint történik:
Az aritmetikai és összefűzési operátorok elsőbbséget élveznek az alábbi szakaszban leírt sorrendben, és mindegyik nagyobb elsőbbséget élvez az összehasonlítási, logikai és bitenkénti operátoroknál. A magasabb elsőbbség azt jelenti, hogy ezek az operátorok először kiértékelésre kerülnek.
Minden összehasonlító operátornak azonos elsőbbsége van, és mindegyik nagyobb elsőbbséget élvez, mint a logikai és bitenkénti operátorok, de alacsonyabb elsőbbséget élveznek, mint az aritmetikai és összefűzési operátorok.
A logikai és bitenkénti operátorok az alábbi szakaszban leírt sorrenddel rendelkeznek, és mindegyik alacsonyabb elsőbbséget élvez, mint az aritmetikai, összefűzési és összehasonlító operátorok.
Az egyenlőségjellel rendelkező operátorok kiértékelése balról jobbra a kifejezésben való megjelenésük sorrendjében történik.
Elsőbbségi sorrend
Az operátorok kiértékelése az alábbi sorrendben történik. A felsorolt operátorok elsőbbsége magasabb, és a későbbiekben felsorolt operátorok előtt kerülnek kiértékelésre:
1. Várakozás operátor
Vár
2. Aritmetikai és összefűzési operátorok
Exponenciális (^)
Unary identity and negation (+, –)
Szorzás és lebegőpontos osztás (*, /)
Egész szám osztás (\)
Moduláris számtani (Mod)
Összeadás és kivonás (+, –)
Sztringösszefűzés (&)
Aritmetikai biteltolódás (<<, >>)
3. Összehasonlító operátorok
Minden összehasonlító operátor (=, , <>, <<=, >, >=, IsIsNot, , Like, TypeOf...Is)
4. Logikai és bitenkénti operátorok
Negation (Not)
Kötőszó (And, AndAlso)
Befogadó tiltás (Or, OrElse)
Kizárólagos tiltás (Xor)
Megjegyzések
Az = operátor csak az egyenlőség-összehasonlító operátor, nem pedig a hozzárendelési operátor.
A sztringösszefűzési operátor (&) nem aritmetikai operátor, de elsőbbséget élvezve az aritmetikai operátorokkal van csoportosítva.
Az Is és IsNot az operátorok objektumhivatkozás-összehasonlító operátorok. Nem hasonlítják össze két objektum értékeit; csak annak megállapításához ellenőrzik, hogy két objektumváltozó ugyanarra az objektumpéldányra hivatkozik-e.
Asszociativity
Amikor egy kifejezésben azonos előnkkel rendelkező operátorok jelennek meg, például szorzás és osztás, a fordító kiértékeli az egyes műveletet, miközben balról jobbra találkozik. Az alábbi példa ezt szemlélteti.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
Az első kifejezés kiértékeli a 96/8 osztást (ami 12-et eredményez), majd a 12/4 osztást, amely három eredményt ad. Mivel a fordító balról jobbra értékeli ki a műveleteket n1 , a kiértékelés ugyanaz, amikor a sorrend kifejezetten meg van jelölve n2. Mindkettőnek n1n2 három eredménye van. Ezzel szemben n3 az eredmény 48, mert a zárójelek kényszerítik a fordítót, hogy először kiértékelje a 8/4 értéket.
Emiatt a rendszer azt mondja, hogy az operátorok asszociatívak a Visual Basicben.
Elsőbbséget és asszociativitást felülíró
Zárójelek használatával kényszerítheti egy kifejezés egyes részeinek kiértékelését mások előtt. Ez felülbírálhatja az elsőbbségi sorrendet és a bal asszociativitást is. A Visual Basic mindig olyan műveleteket hajt végre, amelyek zárójelben vannak elzárva a kívülállók előtt. Zárójelen belül azonban fenntartja a szokásos elsőbbséget és asszociativitást, kivéve, ha zárójeleket használ a zárójeleken belül. Az alábbi példa ezt szemlélteti.
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.