Поделиться через


Порядок применения операторов в Visual Basic

При выполнении нескольких операций в выражении каждая часть вычисляется и разрешается в предопределенном порядке, называемом приоритетом оператора.

Правила приоритета

Если выражения содержат операторы из нескольких категорий, они оцениваются в соответствии со следующими правилами:

  • Операторы арифметики и объединения имеют порядок приоритета, описанного в следующем разделе, и все имеют больше приоритета, чем сравнение, логические и битовые операторы.

  • Все операторы сравнения имеют равный приоритет, и все имеют больший приоритет, чем логические и битовые операторы, но более низкий приоритет, чем арифметические и сцепления операторов.

  • Логические и битовые операторы имеют порядок приоритета, описанного в следующем разделе, и все имеют более низкий приоритет, чем арифметические, сцепления и операторы сравнения.

  • Операторы с равным приоритетом оцениваются слева направо в том порядке, в котором они отображаются в выражении.

Порядок приоритета

Операторы оцениваются в следующем порядке приоритета:

Оператор Await

Await

Арифметические и объединения операторов

Экспонентация (^)

Унарное удостоверение и отрицание (+, )

Умножение и деление с плавающей запятой (*, /)

Целочисленный деление (\)

Модульный арифметический (Mod)

Добавление и вычитание (+, )

Объединение строк (&)

Арифметический битовый сдвиг (<<, >>)

Операторы сравнения

Все операторы сравнения (=, <>=>Is<><=, LikeIsNotTypeOf... )Is

Логические и побитовые операторы

Отрицание (Not)

Сочетание (And, AndAlso)

Инклюзивная дисъюнкционация (Or, OrElse)

Эксклюзивная дисъюнкция (Xor)

Комментарии

Оператор = является только оператором сравнения равенства, а не оператором назначения.

Оператор объединения строк (&) не является арифметическим оператором, но в приоритете он сгруппирован с арифметическими операторами.

Операторы IsIsNot это операторы сравнения ссылок на объекты. Они не сравнивают значения двух объектов; они проверка только для определения того, относятся ли две переменные объекта к одному экземпляру объекта.

Ассоциативность

Если операторы равного приоритета отображаются вместе в выражении, например умножение и деление, компилятор вычисляет каждую операцию по мере того, как она обнаруживает ее слева направо. Это показано в следующем примере.

Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)

Первое выражение вычисляет деление 96/8 (которое приводит к 12), а затем деление 12/4, что приводит к трем. Так как компилятор вычисляет операции n1 слева направо, оценка совпадает, если этот порядок явно указан для n2. Оба n1 и n2 имеют результат трех. В отличие от этого, n3 имеет результат 48, так как скобки принудительно компилятору оценить 8/4 в первую очередь.

Из-за этого операторы, как говорят, остаются ассоциативными в Visual Basic.

Переопределение приоритета и ассоциативности

Скобки можно использовать для принудительной оценки некоторых частей выражения перед другими. Это может переопределить порядок приоритета и левой ассоциативности. Visual Basic всегда выполняет операции, заключенные в скобки перед внешними. Однако в скобках он сохраняет обычный приоритет и ассоциативность, если в скобках не используются скобки. Это показано в следующем примере.

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.

См. также