Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Структура справочника и соглашения >> Обработка исключительных ситуаций >> Защищенный блок кода
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Защищенный блок кода


Радикальный выход из положения предложен, в частности, в языке Object Pascal: вынести всю обработку исключительных ситуаций (ИС) из основной части, выделив в составе блока кода:

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

Рассмотрим два примера:

var
══F: File;
begin
══AssignFile(F, 'SOMEFILE.EXT');
══try
════Reset(F);
════DoSomething;
══finally
════Close(F);
══end;
end;

procedure GetValue(Text: string):Integer;
const DefValue : Integer = 0;
begin
══try
════Result := StrToInt(Text);
══except
════on EConvertError do Result := DefValue;
══end;
end;

Блок, ограниченный зарезервированными словами try и end и содержащий одно из зарезервированных слов finally или except, называется защищенным блоком кода. Существует два основных вида таких блоков; каждый из примеров соответствует своему виду.

Первый пример соответствует случаю, когда необходимо возвратить выделенные программе ресурсы даже в случае аварийной ситуации. Синтаксис блока try...finally таков:

try
══<0ператор>
══<0ператор>
══..........
finally
══<0ператор>
══.........
end;

Следующие за try операторы выполняются в обычном порядке. Если за это время не произошло никаких ИС, далее выполняются те операторы, которые стоят после finally. В случае, если между try и finally произошла ИС, управление немедленно передается на оператор(ы) после finally, которые называются кодом очистки (cleanup code; в документации встречается также термин termination code). Допустим, вы поместили после try операторы, которые должны выделить вам ресурсы системы (дескрипторы блоков памяти, файлов, контекстов устройств и т. п.). Тогда операторы, освобождающие их, следует поместить после finally, и ресурсы будут освобождены в любом случае. Блок try?finally, как можно догадаться, называется блоком защиты ресурсов.

Первый пример собственно обработки ИС не содержит: в нем важен только факт ее возникновения. Для реакции на конкретный тип ситуации применяется блок try... except. Синтаксис его следующий:

try
══<0ператор>
══<0ператор>
═══..........
except
══on Exception1 do <0ператор>
══on Exception2 do <0ператор>
══..........
══else {может отсутствовать)
════<0ператор> {обработчик ИС по умолчанию}
end;

Во втором примере, как и в первом, выполнение блока начинается с секции try. В случае отсутствия исключительных ситуаций только она и выполняется. Секция except получает управление в случае возникновения ИС. Обработчик ИС состоит из набора директив on...do, определяющих реакцию приложения на определенную ситуацию. Каждая директива связывает ситуацию (on...), заданную своим именем, с группой операторов (do...). При возникновении ИС директивы просматриваются последовательно, в порядке их появления. Если возникла ситуация, не определенная ни в одной из директив, вызывается обработчик ИС по умолчанию. После обработки происходит выход из защищенного блока, и управление обратно в секцию try не передается.



[Назад]    [Содержание ]    [Вперед]

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017