Учебник по Delphi 4


Использование директивы 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, количество вызовов функции будет не таким, как в отладочной версии. Так что будьте внимательны и осторожны.



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