Глава 4. Операторы и выражения
В этой главе вы научитесь:
• разбираться в синтаксисе элементов программы на языке Visual Basic,
• использовать в программах операторы присвоения и многие другие,
• правильно составлять сложные выражения с учетом приоритетов выполнения операций.
4.1. Что такое синтаксис
Прежде чем перейти к описанию конкретных операторов языка, сделаем несколько замечаний о синтаксисе, который будет использоваться в дальнейшем при описании элементов программы на языке Visual Basic, а также различных элементов управления.
Синтаксис (Syntax) – это набор правил, определяющий последовательности символов, допустимые в языке программирования. Например, использование метода SetFocus (Установить фокус) имеет простейший синтаксис:
объект.SetFocus
Здесь достаточно вместо слова объект подставить имя реального объекта:
cmdHello.SetFocus
Другой часто используемый метод Print (Напечатать), выводящий текст на поверхность формы или другого объекта, обладает более сложным синтаксисом:
[объект.] Print [[выражение] [{;|,}]]…
Перечислим основные синтаксические правила, которые здесь использованы:
• элементы в квадратных скобках ([]) не обязательны,
• многоточие за квадратными скобками ([] …) говорит о том, что последовательность в скобках может повторяться несколько раз,
• список в фигурных скобках, разделенный вертикальными черточками ({|}) означает, что нужно выбрать только один из элементов данного списка,
• выражением может быть число, текстовая строка или любая последовательность операторов, дающая общий результат.
Исходя из этого, правильными вариантами использования метода Print (Напечатать) будут следующие:
Form1.Print 1, 2, 3, 4, 5
Picture1.Print «Он»; « и»; «она»
Debug.Print «Name:» & cmdHello.Name «Caption:» & cmdHello.Caption
Описанные выше несложные синтаксические правила будут применяться и далее в этой книге.
4.2. Операторы языка Visual Basic
Программа на языке Visual Basic состоит из последовательности операторов (Statements), являющихся элементарными единицами в структуре программы и выполняющих определенные действия над данными. Синтаксис большинства операторов таков:
операнд1 оператор операнд2
На месте одного или обоих операндов (Operands) чаще всего находятся выражения (Expressions) – элементы программы, вырабатывающие значения. Выражения, в свою очередь, могут состоять из одного или нескольких операторов:
2 +2
varX> 4 And varX <10
Form1.Caption & " " & Form1.Tag
Операторы можно разбить на следующие группы:
• присвоения,
• арифметические,
• конкатенации,
• сравнения,
• логические.
4.3. Оператор присвоения
Наиболее часто в программах на языке Visual Basic используется оператор присвоения, имеющий следующий формат:
приемник_данных = источник_данных
Символ "=" в данном случае является не знаком равенства, а оператором присвоения, а приемник_данных и источник_данных – его операндами.
Операция присвоения может задавать новые значения переменным, либо менять свойства объектов, например:
Number1 = 500
Form1.Caption = «Новый заголовок формы»
Сначала в переменную Number1 заносится целое число 500. Во второй строке свойство Caption (Заголовок) объекта Form1 после операции присвоения будет содержать текст «Новый заголовок формы» (без кавычек, которые являются ограничителями строки символов).
На этих простых примерах мы рассмотрели использование одного оператора присвоения, хотя в правой части может находиться выражение, состоящее из нескольких операторов:
Form1.Caption = «Программа:» & Form1.Name
При работе программы Visual Basic сначала вычисляет значение выражения в правой части оператора, а затем присваивает его в левой части.
4.4. Арифметические операторы
С большинством арифметических операторов вы должны быть знакомы еще со средней школы. Следующая таблица включает полный список арифметических операторов (Рис.4.1).
Рис.4.1. Арифметические операторы
Выражения, состоящие из нескольких арифметических операторов, нередко содержат круглые скобки для изменения порядка выполнения операций, например:
Print (1 +2) * 3
Тип данных результата арифметического выражения определяется типами данных составляющих его операндов. Если же типы разные, то используется тип операнда, имеющий наибольший размер. Так, если вы складываете число 1000 типа Integer (Целый) с числом 100000 типа Long (Длинный целый), то результат будет иметь тип Long (Длинный целый).
4.5. Операторы конкатенации
Операторы конкатенации используются только со строками символов. Их всего два: амперсант "&" и плюс "+». Если быть более точным, то единственный оператор конкатенации может быть выражен одним из этих символов. Операция конкатенации заключается в соединении двух строк в одну.
Пример конкатенации строк:
strWelcome = «Добро» & " " & «пожаловать!»
Результатом соединения трех строк будет одна – «Добро пожаловать!», которая и будет занесена в переменную strWelcome. Обратите внимание, что оператор конкатенации сам не вставляет пробелы между словами. Вторая строка " " в выражении состоит из одного пробела, без которого результирующая строка получилась бы слитной: «Добропожаловать!».
4.6. Операторы сравнения
Операторы сравнения, также похожи на аналогичные знаки математических операций (Рис.4.2).
Рис.4.2. Операторы сравнения
Результатом любой операции сравнения всегда является True (Истина) или False (Ложь), поэтому они часто используются в качестве условий выбора.
Пример использования операции сравнения:
bolYesNo = varX> 4
Здесь в переменную bolYesNo заносится результат сравнения varX> 4. Если varX больше четырех, то переменная принимает значение True (Истина), в противном случае – False (Ложь).
4.7. Логические операторы
И, наконец, завершают множество операторов Visual Basic логические операторы (Рис.4.3).
Рис.4.3. Логические операторы
Их часто называют Булевыми операторами, потому что они заимствованы из математической логики – Булевой алгебры. Операнды и результат логической операции имеют тип Boolean (Логический).
Самым простым является оператор логического отрицания – Not. Если он стоит перед единственным операндом, значение которого – True (Истина), то результатом всего выражения будет False (Ложь), и наоборот (Рис.4.4).
Рис.4.4. Результаты вычисления выражений
с оператором логического отрицания Not
Оператор логического умножения And всегда находится между двумя операндами. Значение всего выражения будет True (Истина), только если оба из них возвращают True (Истина), иначе – False (Ложь) (Рис.4.5).
Рис.4.5. Результаты вычисления выражений
с оператором логического умножения And
Логическое сложение Or – еще один из наиболее часто встречающихся логических операторов. По написанию он похож на предыдущий и возвращает True (Истина), если хотя бы один из операндов имеет значение True (Истина) (Рис.4.6).
Рис.4.6. Результаты вычисления выражений
с оператором логического сложения Or
Исключающее сложение Xor работает аналогично Or, кроме случая, когда оба операнда имеют значение True (Истина) (Рис.4.7).
Рис.4.7. Результаты вычисления выражений
с оператором исключающего сложения Xor
Оператор логической эквивалентности Eqv возвращает True (Истина), если оба операнда имеют одинаковое значение. Иными словами, его результат противоположен использованию оператора исключающего сложения Xor (Рис.4.8).
Рис.4.8. Результаты вычисления выражений
с оператором логической эквивалентности Eqv
Логическая импликация Imp является единственным оператором, результат выполнения которого зависит от положения операндов. Он всегда равен True (Истина), кроме случая, когда первый операнд True (Истина), а второй – False (Ложь) (Рис.4.9).
Рис.4.9. Результаты вычисления выражений
с оператором логической импликации Imp
4.8. Приоритеты операций
Порядок вычисления сложного выражения, состоящего из нескольких операторов, зависит от их приоритетов (Рис.4.10).
Рис.4.10. Операторы языка Visual Basic
в порядке убывания их приоритета
Если друг за другом следуют несколько операторов с одинаковым приоритетом, то вычисление выражения производится слева направо.
В качестве примера попробуйте разобраться с порядком вычисления следующего выражения:
Form1.Visible = 2 <> 3 And Not 2 ^ 3> 2 +3
Даже на первый взгляд видно, что это сделать непросто, особенно если не заглядывать в таблицу. Совсем другое дело, если добавить в выражение несколько пар круглых скобок, явно указывающих на порядок выполнения операций:
Form1.Visible = (2 <> 3) And (Not ((2 ^ 3)> (2 +3)))