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

Обновлен: Ноябрь 2007

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

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

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

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

  • У всех операторов сравнения приоритет одинаковый, и он выше, чем у логических и поразрядных операторов, но ниже, чем у арифметических операторов и операторов объединения.

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

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

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

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

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

Возведение в степень (^)

Унарные плюс и минус (+, –)

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

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

Модульная арифметика (Mod)

Сложение и вычитание (+, –), объединение строк (+)

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

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

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

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

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

Отрицание (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, что в результате 3. Так как компилятор вычисляет операции для n1 слева направо, порядок вычисления при этом такой же, как для n2. И n1, и n2 имеют результат 3. Напротив 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.

См. также

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

Операторы и выражения в Visual Basic

Ссылки

Оператор = (Visual Basic)

Оператор Is (Visual Basic)

Оператор IsNot

Оператор Like (Visual Basic)

Оператор TypeOf (Visual Basic)

Список операторов, сгруппированных по функциональному назначению