Материал: Программирование на языке Visual Basic для приложений. Подвальный С.Л., Рог А.И

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

 

 

Окончание табл. 3.1

 

 

для положитель-

 

 

 

 

ных чисел

 

 

 

 

 

 

 

String

Используется

Длина строки от 0

 

$

 

для хранения

до 64 Кбайт

 

 

 

строковых

 

 

 

 

значений

 

 

 

 

 

 

 

 

Variant

Может ис-

Значения любого

 

 

 

пользоваться

из вышепе-

 

 

 

для хранения

речисленных ти-

 

 

 

всех вышепе-

пов плюс Null,

 

 

 

речисленных

Error, Empty,

 

 

 

типов

Nothing

 

 

 

 

 

 

 

Если такие типы данных, как integer или string, не требуют особых комментариев, поскольку они стандартны и просты, то типы данных Decimal, object и variant следует прокомментировать. Про тип данных object мы отдельно поговорим, сейчас же рассмотрим типы variant и Decimal.

Языки программирования можно делить на типизированные (C++, Pascal) и бестиповые (Lisp). В первом случае каждая переменная имеет фиксированный тип данных, который не может изменяться в ходе программы. В бестиповых же языках тип переменной не определяется и может изменяться во время выполнения программы. Тип данных variant - универсальный тип данных, позволяющий программисту не заботиться о том, какого типа будут переменные. Но данная возможность - палка о двух концах. С одной стороны, безусловное удобство: не надо думать при объявлении переменной, с другой - это может привести к ошибкам, которые трудно обнаружить. Более того, на обработку переменных данного типа тратится больше времени, да и память расходуется нерационально.

Мы советуем (особенно начинающим программистам) не злоупотреблять данным типом, хотя ряд приемов его исполь-

43

зования заметно упрощает программирование. Например, вы хотите, чтобы пользователь программы ввел целое число (после чего программа нарисует круг соответствующего радиуса), и ввели переменную ввода целого типа. Но что, если пользователь введет вместо целого числа вещественное или вообще строковое значение? Произойдет ошибка при попытке присвоения переменной значения не того типа. Вот тут-то и необходим тип variant. Если переменная для ввода будет объявлена как Variant - ничего страшного не случится: введенное значение будет благополучно присвоено этой переменной, а вы получите возможность проанализировать введенное значение и попросить пользователя повторить ввод, если введенное им значение не отвечает требуемым условиям.

Теперь сделаем ряд замечаний относительно типа Decimal. Этот тип является частным случаем variant, и все приведенные аргументы за и против также относятся и к нему.

3.2. Операции

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

[Результат =] операнд <операция> операнд

Любая операция имеет результат, не важно, явно или неявно он описан. Операнд - это элемент данных, участвующий в операции. Для каждой операции определены типы данных операндов, для которых она имеет смысл и по которым определяется тип результата. Естествен вопрос: по какому именно правилу определяется тип результата, ведь в качестве операндов могут быть операнды разных типов? Для ответа на этот вопрос необходимо ввести определение приведения.

Приведение - это (автоматическое) преобразование значения одного типа в эквивалентное значение другого типа. Приведение типов представлено на рисунке.

44

 

 

Variant

 

 

 

 

 

 

 

 

 

 

 

Decimal

String

Object

Double

 

 

 

Currency

 

 

 

Date

 

 

 

Single

 

 

 

Long

 

 

 

Integer

 

 

 

Byte

 

 

 

Boolean

Приведение типов

Конечно, не всякое приведение возможно, т. е. не всегда можно сделать именно эквивалентное преобразование. Например, целое число 3 можно преобразовать в вещественное число 3,0 - и значение сохранится, но вещественное число 3,1415926 нельзя преобразовать в целое, не потеряв информацию.

Если присвоить значение "старшего" типа переменной "младшего" типа, например, присвоить значение типа Double переменной типа Integer, то такое действие будет выполнено, но при этом произойдет утрата информации (будет потеряна дробная часть числа).

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

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

45

 

 

Таблица 3.2

 

Арифметические операции

 

Операция

Название

Приоритет

^

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

1

-

Отрицание (НЕ)

2

*

Умножение

3

/

Деление

3

\

Деление нацело

4

Mod

Остаток от деления

5

+

Сложение

6

-

Вычитание

6

&

Объединение (конкатенация) строк

7

Таким образом, вначале выполняются арифметические операции согласно порядку в таблице, затем операции отношения, а после - логические. Есть способ повышения приоритетности у операции - это взятие ее операндов в скобки.

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

Таблица 3.3

 

Арифметические операции сравнения

=

Равно

<>

Не равно

<Меньше

<= Меньше или равно

>Больше

>= Больше или равно

Is Идентично (только для объектов, вместе с зарезервированным словом Null используется для проверки, является ли значение пустым)

46

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

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.4

 

 

 

 

 

 

Логические операции

 

 

 

 

Операция

 

 

 

 

Название

 

 

 

 

 

not a

 

 

Отрицание

 

 

 

 

 

 

 

 

a and b

 

 

Логическое И (конъюнкция)

 

 

 

 

a or b

 

 

Логическое ИЛИ (дизъюнкция)

 

 

 

 

a xor b

 

 

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

 

 

 

 

 

a eqv b

 

 

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

 

 

 

 

 

a imp b

 

 

Импликация

 

 

 

 

 

 

Семантика логических операций задается таблицей ис-

 

тинности.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.5

 

 

 

 

 

 

Таблица истинности

 

 

 

а

 

b

 

not a

 

a and

a or b

 

а xor

 

a eqv

a imp

 

 

 

 

 

 

 

b

 

 

b

 

b

b

 

True

 

True

 

False

 

True

True

 

False

 

True

True

 

True

 

False

 

False

 

False

True

 

True

 

False

False

 

False

 

True

 

True

 

False

True

 

True

 

False

True

 

False

 

False

 

True

 

False

False

 

False

 

True

True

 

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

47

Источник: https://studfile.net/preview/16565567/