Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Delphi_1.doc
Скачиваний:
43
Добавлен:
28.03.2015
Размер:
710.14 Кб
Скачать
    1. 2.13. Переменные с непостоянным типом значений

      1. 2.13.1. Тип данных Variant

В среде Delphi определен стандартный тип данных Variant, с помощью которого объявляются переменные с непостоянным типом значений. Разработан специально для тех случаев, когда на этапе компиляции программист не может сказать, какого типа данные будут использоваться в выражении или как параметры вызова подпрограмм.

Переменная с типом Variant занимает в памяти 16 байт. В них хранятся текущее значение переменной (или адрес значения в динамической памяти) и тип этого значения.

Структура вариантного типа представляет собой упакованную запись с вариантной частью. Типы TVarData и TVarType (тождественный типу Word), константы (указывающие тип помещенных в вариант данных) описаны в модуле System. Функциональная часть описана в модуле Variants, который необходимо подключать, если мы хотим работать с вариантным типом.

      1. 2.13.2. Значения переменных с типом Variant

1. В переменную-вариант можно поместить:

  • целое или вещественное число;

  • булевское значение;

  • строковое значение;

  • время и/или дату;

  • OLE-объект;

  • массив произвольной размерности и длины, содержащий элементы одного из перечисленных выше типов, так называемый вариантный массив (не статический).

Кроме того, переменные с типом Variant принимают два специальных значения: Unassigned и Null.

Значение Unassigned показывает, что переменной еще не присвоено значение. Оно автоматически устанавливается в качестве начального значения любой переменной с типом Variant.

Значение Null показывает, что переменная имеет неопределенное значение.

В Delphi определены такие константы, указывающие тип помещенных в вариантданных. Таблица…

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

      1. 2.13.3. Variant в выражениях

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

var

V1, V2, V3, V4: Variant;

begin

V1 := 5; // целое число

V2 := 0.8; // вещественное число

V3 := '10'; // строка

V4 := V1 + V2 + V3; // вещественное число 15.8

end;

Если же V3:=’текст’, то выражение V1 + V2 + V3 вызовет исключение EVariantError.

2. Если в выражении участвует переменная со значением Null, то результат будет Null.

      1. 2.13.4. Преобразование вариантов к другим типам данных

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

integer

real

string

boolean

integer

converts integer formats

converts to real

converts to string representation

returns False if 0, True otherwise

real

rounds to nearest integer

converts real formats

converts to string representation using regional settings

returns False if 0, True otherwise

string

converts to integer, truncating if necessary; raises exception if string is not numeric

converts to real using regional settings; raises exception if string is not numeric

converts string/character formats

returns False if string is "false" (non-case-sensitive) or a numeric string that evaluates to 0, True if string is "true" or a nonzero numeric string; raises exception otherwise

character

same as string (above)

same as string (above)

same as string (above)

same as string (above)

Boolean

False = 0, True = -1 (255 if Byte)

False = 0, True = -1

False = "0", True = "-1"

False = False, True = True

Unassigned

returns 0

returns 0

returns empty string

returns False

Null

raises exception

raises exception

raises exception

raises exception