Megosztás a következőn keresztül:


Operátorok elsőbbsége a Visual Basicben

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.

  • 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 a következő sorrendben történik:

Operátor várakozása

Várja

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 (<<, >>)

Összehasonlító operátorok

Minden összehasonlító operátor (=, , <>, <=<, >, >=, IsIsNot, , Like, TypeOf...Is)

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.
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.

Lásd még