Получение приоритета
Получение приоритета
В более сложных выражениях, включающих несколько знаков операций, VBA нужно знать, какие операции выполнять первыми, вторыми, а какие третьими. В выражении intA + intB * intC два знака операций: + (операция сложения) и * (операция умножения). На русском это выражение читается как "intA плюс intB умножить на intC".
В данном выражении символ * идет вторым, но он имеет приоритет перед операцией сложения. Сначала VBA умножит intB на intC, а уж затем добавит полученный результат к intA. Как можно догадаться из этого примера, VBA следует определенной последовательности выполнения отдельных частей выражения, когда в выражении несколько знаков операций.
Чтобы изменить последовательность операций, порождаемую приоритетами, в выражении используются скобки. Если вы напечатаете (intA + intB) * intC то VBA сначала сложит две переменные, а затем умножит результат на значение переменной intC.
Но каковы правила VBA для порядка выполнения операций в отсутствие скобок? Если выражение содержит знаки операций из двух или нескольких категорий, то VBA выполняет операции из разных категорий в следующем порядке.
1. Арифметические операции и конкатенация.
2. Операции сравнения.
3. Логические операции.
Внутри каждой категории VBA тоже имеет правила порядка выполнения операций.
Арифметические операции, сравнение и логические операции осуществляются в порядке, соответствующем их представлению в табл. 7.2. Операции сравнения в VBA выполняются в том порядке, в каком они идут, слева направо. Если в выражении встречается несколько операций одного уровня, они тоже обрабатываются слева направо.
Таблица 7.2. Порядок выполнения операций в VBA (внутри каждой категории операции выполняются в том порядке, в котором приведены)
Знаки операций
Операции
Арифметические
?
Возведение в степень
-
Отрицание
* или /
Умножение или деление
Целочисленное деление
Mod
Вычисление остатка деления
+ или -
Сложение или вычитание
Конкатенация
&
Конкатенация строк
Сравнения
=
Равенство
<>
Неравенство (не равно)
<
Меньше
>
Больше
<=
Меньше или равно
>=
Больше или равно
Like
Сравнение строк с заданным образцом
Is
Проверка идентичности ссылок на объекты
Логические
Not
Логическое НЕТ
And
Логическое И
Or
Логическое ИЛИ
Хоr
Логическое Исключительное ИЛИ
Eqv
Логическая эквивалентность
Imp
Логическая импликация