Delphi 5.Учебник


         

Использование директивы Assert



Оператор Assert— новый оператор в Delphi 4. В действительности это просто тест на логическую истину/ложь. При использовании этого оператора вы убеждаетесь, что логическое выражение истинно, если при выполнении выражение становится ложным, генерируется исключительная ситуация. Синтаксис использования оператора таков:

Assert (<логическое выражение)

Вы можете использовать проверку, например, в начале процедуры для выяснения корректности параметров, как показано ниже.

procedure Foo(Count: Cardinal);
begin
Assert(Count < SizeOf(Word));
end;

Если выражение окажется ложным, появится сообщение об ошибке, подобное показанному на Рисунок 2.3. Конечно же, у вас уже вертится на языке вопрос, чем же это отличается от конструкции if... else. Дело в том, что управлять генерацией кода для оператора Assert очень легко и просто с помощью директивы компилятора. Для применения описанных возможностей используйте директиву $ASSERTIONS ON или $С +, а для отключения действия Assert— $ASSERTIONS OFF или $С - (при этом компилятор игнорирует операторы Assert и код для них не генерируется).

Рисунок 2.3. Сообщение об ошибке Assert

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

{$ifdef Debug}
($ASSERTIONS ON)
{$else}
($ASSERTIONS OFF)
{$endif}

Какого типа выражения могут использоваться в операторе Assert? Любого (конечно, если оно возвращает логическое значение). Однако тут есть свои маленькие подводные камушки, о которые легко поцарапаться. Представьте себе, что у вас есть некоторая функция, например выясняющая, сколько раз она была вызвана.

function CountMe: Integer;
const ReferenceCount: Integer = 0;
begin
Inc(ReferenceCount);
Result:= ReferenceCount;
end;

Предположим, что вы вызываете ее в операторе Assert. Таким образом, в коммерческой версии, которая игнорирует все операторы Assert, количество вызовов функции будет не таким, как в отладочной версии. Так что будьте внимательны и осторожны.



Содержание раздела