Главная » Delphi » Использование вариантов в выражениях

0

Варианты можно использовать в выражениях со следующими  операторами: +, -, =,

*, /, div, mod, shl, shr, and, or, xor, not, :=, <>, <, >, <=, >=.

Используя варианты в выражениях, Delphi принимает решение о том, как именно

должны  выполняться операторы, на основании текущего  типа  содержимого вариан та. Например, если варианты V1 и V2 содержат целые  числа,  то результатом выраже ния V1+V2 станет их сумма. Если они содержат строки, то результатом будет их объе динение. А что  произойдет, если  типы  данных  различны? В этом  случае  Delphi ис пользует  некоторые правила, чтобы  определить, какие  именно преобразования необходимо выполнить. Так,  если  V1 содержит строку  ‘4.5’, а V2 —  вещественное число, то V1 будет преобразовано в число  4.5 и добавлено к значению V2. Рассмот рим следующий пример:

var

V1, V2, V3: Variant;

begin

V1 := ‘100’;       // Строковый тип

V2 := ’50′;        // Строковый тип

V3 := 200;         // Тип Integer

V1 := V1 + V2 + V3;

end;

Исходя  из сделанного выше замечания, можно предположить, что в результате будет получено целое  значение 350. Но это не так. Поскольку вычисление выражений выпол няется слева направо, то при первом сложении (V1 + V2) складываются две строки и в результате должна  получиться тоже  строка, имеющая значение ‘10050’. А уже затем полученный результат будет преобразован в целое значение и просуммирован с третьим целочисленным операндом, в результате чего будет получено значение 10250.

В Delphi для успешного выполнения вычислений данные типа Variant всегда преоб

разуются в самый высокий тип данных, присутствующих в выражении. Но если в опера

ции  участвуют два варианта, для которых Delphi  не в состоянии подобрать подходящий тип, генерируется и передается исключение invalid variant type conversion (недопустимое преобразование типов варианта). Вот простейший пример такой ситуации:

var

V1, V2: Variant;

begin

V1 := 77;

V2 := ‘hello';

V1 := V1 / V2;       // Возникает исключение.

end;

Как уже отмечалось, использовать явное  преобразование во время  компиляции — хорошая мысль. Так, в случае даже такой  обычной операции, как V4 := V1*V2/V3, в процессе выполнения программы Delphi вынужден  рассматривать множество вари антов  преобразования типов  для того,  чтобы  найти наиболее подходящий. Явное  же указание  типов, например V4 := Integer(V1)*Double(V2)/Integer(V3), позво ляет  принять решение еще на стадии  компиляции, избежав тем самым излишних за трат  времени при  работе программы. Правда, при  этом  следует  точно знать,  какой именно тип данных будет содержится в варианте.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии