Основы офисного программирования и язык VBA


Операции


В любом языке программирования допустимы выражения. Нужно уметь выражаться корректно. Выражения строятся из переменных, констант, встроенных функций с использованием знаков операций и скобок. Запись выражения задает правило (алгоритм) вычисления его значения и его типа. Естественно, что тип и значения всех его переменных должны быть определены до момента вычисления выражения. Языки программирования различаются между собой тем, до какой степени они допускают автоматическое преобразование типов данных в процессе вычисления выражения. Считается, что язык является более надежным, предохраняющим от многих ошибок программиста, если он (язык) не допускает автоматического преобразования типов. Конечно, здесь необходим разумный компромисс. Так все языки допускают при вычислении выражения X+Y вещественный тип для переменной X и целочисленный тип для переменной Y, проводя автоматическое преобразование к вещественному типу и выполняя, затем уже, сложение вещественных чисел. Язык VBA в этом отношении занимает золотую середину. Он не столь строг, как классические языки, предложенные Никласом Виртом - Паскаль, Модула, Оберон, но и не допускает особых вольностей. Среди его встроенных функций есть большое число функций, предназначенных для явного преобразования типов, что позволяет программировать в лучших традициях надежных языков программирования, не доверяя неявным преобразованиям.

Тема построения выражений обширна, достаточно сказать, что число встроенных функций измеряется не десятками, а сотнями. Подробное их описание не входит в нашу задачу, для этого есть справочная система, но общий обзор и некоторые детали мы постараемся привести.

Приведем основные операции, которые можно выполнять над данными в языке VBA, классифицируя их по типу и приоритету:

Таблица 8.1. Операции и их приоритет

ПриоритетАрифметическиеСравненияЛогическиеОписание некоторых операций
1Возведение в степень - (^)Равенство - (=)Отрицание - (Not)При возведении в степень основание и показатель могут быть арифметическими выражениями любого типа. Результат имеет тип Double.
2Унарный минус - (-)Неравенство - (<>)Конъюнкция - (And)
3Умножение, Деление - (*, /)Меньше - (<)Дизъюнкция - (Or)
4Деление нацело - (\)Больше - (>)Исключительное Или - (Xor)Деление нацело определено над целочисленными данными (применимо и к вещественным данным) и дает результат целого типа. Исключительное Или требует, чтобы один из операндов имел значение, отличное от True
5Остаток от деления нацело - (mod)Меньше или равно - (<=)Эквивалентность - (Eqv)Операция mod определена над данными целого типа и возвращает результат целого типа - остаток от деления нацело.
6Сложение, вычитание - (+,-)Больше или равно - (>=)Импликация - (Imp)Среди логических операций определена операция следования (импликация), ложная в единственном случае, когда посылка истинна, а заключение ложно.
7Конкатенация строк - (&)Подобия - (Like), Равенство ссылок - (Is) Операция Like проверяет соответствие строки образцу. Операция Is, определенная над объектами, не проверяет равенство самих объектов, она проверяет совпадение ссылок. Ссылки должны задавать один и тот же объект.

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

Все операции сравнения имеют один и тот же приоритет. Арифметические и логические операции выполняются в соответствии с указанным приоритетом.

Одна и та же операция, записанная несколько раз подряд, или операции одного приоритета (умножение и деление, сложение и вычитание) выполняются слева направо, - из двух операций первой выполняется та, которая стоит левее в записи выражения.

Скобки позволяют изменить указанный порядок вычислений выражения, поскольку выражения в скобках имеют наивысший приоритет и вычисляются первыми. Внутри скобок действует обычный порядок вычисления.

Операция конкатенации не является арифметической, но при ее появлении в выражении она выполняется после всех арифметических операций, но до вычисления операций сравнения.




Начало  Назад  Вперед