Базовые типы данных и операции над ними, страница 12

Оператор Xor выполняет логическую операцию исключающее ИЛИ. Значение выражения будет True тогда и только тогда, когда любой, но только один, его операнд имеет значение True.

Оператор Eqv выполняет проверку эквивалентности, т.е. значение всего выражения будет True, если оба его операнда имеют одно и то же значение.

Оператор Imp выполняет логическую операцию импликация. Значение выражения будет иметь значение True, если первый операнд имеет значение False, но False, если первый операнд – True, а второй – False.

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

p

q

p And q

p Or q

Not p

p Xor q

p Eqv q

p Imp q

True

True

True

True

False

False

True

True

True

False

False

True

False

True

False

False

False

True

False

True

True

True

False

True

False

False

False

False

True

False

True

True

Например, следующее выражение:

(Var1 >= 1) And (Var1 <= 10)

будет иметь значение True, если значение переменной Var1 находится в диапазоне от 1 до 10, включая граничные точки диапазона. А выражение:

(Var1 < 1) Or (Var1 > 10)

наоборот, будет иметь значение True, если значение переменной Var1 не принадлежит указанному диапазону.

Приоритет операторов указывает порядок их обработки в сложном выражении. Если в выражении используется более одного оператора, то все они выполняются в строго определенном порядке, что обеспечивает однозначное трактование значения этого выражения. Порядок вычисления сложного выражения рассмотрим на примере процедуры, вычисляющей объем шара по формуле 4πR3/3, листинг которой приведен далее.

1: Sub Calculation()

2:    Const strTitle = "Calculation"

3:    Const Pi = 3.14

4:    Dim Radius As Double   ' Радиус

5:    Dim Volume As Double   ' Объем

6:       

7:    Radius = InputBox("Введите радиус", strTitle)

8:    Volume = (4# * Pi * (Radius ^ 3#)) / 3#

9:    MsgBox "Объем шара радиусом " & Radius & _

10:            " равен " & Volume, , strTitle

11:  End Sub

После ввода радиуса, например, равным 2 она выдаст следующий результат:

Основные вычисления процедуры Calculation выполняются в строке 8:

Volume = (4# * Pi * (Radius ^ 3#)) / 3#

В ней символы «#» после чисел были вставлены редактором Visual Basic вместо нулей в их дробной части, например, 4# вместо 4.0, и означают, что соответствующие значения относятся к типу Double. Оценка этого выражения на VBA выполняется точно также как и в математике – на основании всем известного приёма упростить выражение. Согласно этого приёма, в начале вычисляются подвыражения в самых внутренних скобках, т.е. Radius ^ 3#. Для определенности далее будем считать введённый с помощью функции InputBox Radius = 2, а константа Pi = 3.14. Тогда 23 = 8, а все выражение примет вид:

Volume = (4# * 3.14 * 8#) / 3#

Далее вычисляется следующее подвыражение в круглых скобках – числитель: 4# * 3.14 * 8#. Поскольку в этом выражении идут подряд две равнозначные операции умножения, то они выполняются в порядке следования слева направо, т.е. сначала будет вычислено 4 * 3.14 = 12.56, а затем – 12.56 * 8 = 100.48. В результате все выражение упростится до:

Volume = 100.48 / 3#,

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

Volume = 33.4933333333333.

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

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

Приоритет

Операция

Описание

1

()

Круглые скобки

2

^

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

3

-

Унарный минус

4

*, /

Умножение и деление

5

\

Целочисленное деление

6

Mod

Деление по модулю

7

+, -

Сложение и вычитание

8

&

Конкатенация

9

>, <, >=, <=, =, <>, Is, Like

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

10

Not

НЕ

11

And

И

12

Or

ИЛИ

13

Xor

Исключающее ИЛИ

14

Eqv

Эквивалентность

15

Imp

Импликация

16

=

Присваивание

На основании приведенного выше примера и таблицы приоритетов можно сформулировать правила вычисления сложных выражений VBA следующим образом:

1.  Оценка (вычисление) сложного выражения осуществляется на основе приоритетов входящих в него операторов.

2.  Наивысшим приоритетом обладают круглые скобки, которые используются для:

a)  разложения сложного выражения на подвыражения,

b)  придания выражению более структурированного и наглядного вида,

c)  изменения установленного по умолчанию приоритета выполнения операторов,

d)  а также в случае сомнения относительно порядка выполнения операторов.

3.  Подвыражения, записанные в круглых скобках, оцениваются в установленном порядке выполнения операторов.