Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
При выполнении нескольких операций в выражении каждая часть вычисляется и разрешается в предопределенном порядке, называемом приоритетом оператора.
Правила приоритета
Если выражения содержат операторы из нескольких категорий, они оцениваются в соответствии со следующими правилами:
Операторы арифметики и объединения имеют порядок приоритета, описанного в следующем разделе, и все имеют больше приоритета, чем сравнение, логические и битовые операторы. Более высокий приоритет означает, что эти операторы оцениваются сначала.
Все операторы сравнения имеют равный приоритет, и все имеют больший приоритет, чем логические и битовые операторы, но более низкий приоритет, чем арифметические и сцепления операторов.
Логические и битовые операторы имеют порядок приоритета, описанного в следующем разделе, и все имеют более низкий приоритет, чем арифметические, сцепления и операторы сравнения.
Операторы с равным приоритетом оцениваются слева направо в том порядке, в котором они отображаются в выражении.
Порядок приоритета
Операторы оцениваются в следующем порядке приоритета. Операторы, перечисленные в списке, сначала имеют более высокий приоритет и оцениваются до того, как операторы перечислены позже:
1. Оператор Await
Ждать
2. Арифметические и сцепления операторов
Экспонентация (^)
Унарное удостоверение и отрицание (+, –)
Умножение и деление с плавающей запятой (*, /)
Целочисленный деление (\)
Модульный арифметический (Mod)
Добавление и вычитание (+, –)
Объединение строк (&)
Арифметический битовый сдвиг (<<, >>)
3. Операторы сравнения
Все операторы сравнения (=, <><<=>>=Is, IsNotLikeTypeOf... )Is
4. Логические и битовые операторы
Отрицание (Not)
Сочетание (And, AndAlso)
Инклюзивная дисъюнкционация (Or, OrElse)
Эксклюзивная дисъюнкция (Xor)
Комментарии
Оператор = является только оператором сравнения равенства, а не оператором назначения.
Оператор объединения строк (&) не является арифметическим оператором, но в приоритете он сгруппирован с арифметическими операторами.
Операторы Is — IsNot это операторы сравнения ссылок на объекты. Они не сравнивают значения двух объектов; Они проверяют только, чтобы определить, относятся ли две переменные объекта к одному экземпляру объекта.
Ассоциативность
Если операторы равного приоритета отображаются вместе в выражении, например умножение и деление, компилятор вычисляет каждую операцию по мере того, как она обнаруживает ее слева направо. В следующем примере показано это.
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. 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.