Конструкції ly і t в delphi

Програми Delphi мають вбудовану обробку винятків за замовчуванням, яка в деяких випадках може виявитися достатньою. вбудована обробка винятків переслідує, по-перше, можливість отримання більш детальної інформації про помилку і / або місці її виникнення і, по-друге, включення власного коду по її обробці, якщо стандартна обробка не влаштовує.

Щоб змусити програми на Delphi використовувати механізм управління винятками, необхідно розмістити відповідні оператори всередині спеціальних мовних конструкцій Try.

Конструкція Try. Finally. End

Конструкція Try..Finally гарантує, що програма виконає оператори, що звільняють ресурси, незалежно від того, було чи ні порушено виняток. Таким чином, ця конструкція використовується тоді, коли цілком достатнім є просто безпечно завершити програму після виникнення виключення. Винятки в таких конструкціях не обробляються, їх обробка буде передана далі. Якщо інший обробки не передбачено, то управління буде передано оброблювачу за замовчуванням.

Синтаксис конструкції наступний:

<операторы захвата ресурсов>Try
<операторы, которые могут вызвать исключение>Finally
<операторы, освобождающие ресурсы>End;

Слід зазначити, що, якщо винятку не буде порушено, то оператори з розділу Finally також будуть звільняти ресурси. Відмінність полягає в тому, що:
• по-перше, при виникненні виключення частина операторів з розділу Try не виконується, а при нормальній роботі - виконуються всі;
• по-друге, після звільнення ресурсів внаслідок порушення виключення пошук обробника виключення продовжиться, оскільки виключення цієї конструкцією не обробляються, а при нормальній роботі буде виконуватися оператор, наступний за конструкцією Try..Finally.
Слід по можливості отримувати різні ресурси перед конструкцією Try. Це гарантує, що розділ Finally зможе належним чином звільнити ресурси.

C: = Cursor;
Cursor: = crHourGlass;
edDivr.Visible: = false;
try
A / B
finally
Cursor: = C;
edDivr.Visible: = true;
end;

Конструкція Try. Except. End

Оператори в розділі Except виконуються тільки при порушенні винятків, але ніколи при нормальній роботі програми. Більш того, в розділі Except може бути кілька обробників винятків, кожен з яких орієнтований на певний тип винятку. Після виконання операторів з розділу Except виключення знищуються, а виконання програми триває з оператора, наступного за конструкцією Try..Except.

Синтаксис конструкції наступний:

Як і раніше, оператори розділу Try можуть порушувати виключення. Розділ Except містить оператори, які виконують дії по очищенню (cleanup code, termination code). Однак якщо помилка не виникає, то оператори з розділу Except пропускаються.

Оператори розділу Try в обох конструкціях називаються захищеним кодом.

try
A / B;
except
lbRes.Caption: = 'Niht';
// raise;
end;

Вкладені конструкції Try

Delphi дозволяє використовувати вкладені конструкції оброблювачів винятків. Глибина вкладення і послідовність проходження конструкцій не обмежена. Загальний синтаксис вкладених конструкцій Try:

Так, оскільки конструкція Try..Finally насправді не обробляє виключення, то, уклавши її всередину конструкції Try..Except, ми за допомогою конструкції Try..Finally можемо повернути ресурси системі, а вже потім за допомогою конструкції Try..Except обробити виняток .

Схожі статті