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 (=
, , <>
, <=
<
, >
, >=
, Is
IsNot
, , 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 n1
n2
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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: