Обробка винятків

Обробка винятків

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

PascalABC.NET є мультіпарадігменним мовою: на ньому можна програмувати в структурному, об'єктно-орієнтованому і функціональному стилі.

PascalABC.NET - це також проста і потужна інтегрована середовище розробки, що підтримує технологію IntelliSense, що містить засоби автоформатирования, вбудований відладчик і вбудований дизайнер форм.

Книга: Опис мови PascalABC.NET

Обробка винятків

Обробка винятків: огляд

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

Є ряд стандартних типів виключень. Можна також визначати призначені для користувача типи винятків.

Якщо винятку не обробити, то програма завершиться з помилкою. Для обробки виключень використовується оператор try. except.

Зазвичай виключення збуджуються в підпрограма, оскільки розробник підпрограми, як правило, не знає, як обробити помилкову ситуацію. У місці виклику підпрограми вже, як правило, відомо, яким чином слід обробляти виключення. Наприклад, нехай розроблена наступна функція:

function mymod (a, b: integer): integer;

Якщо викликати mymod (1,0), то буде порушено виняток System.DivideByZeroException цілочисельного ділення на 0.

Розглянемо наївну спробу обробити помилкову ситуацію всередині функції mymod:

function mymod (a, b: integer): integer;

writeln ( 'Функція mymod: ділення на 0');

Подібне рішення є поганим, оскільки програміст, який розробляє функцію mymod, не знає, як вона буде використовуватися. Наприклад, при виконанні функції mymod в циклі ми побачимо на екрані багаторазове повідомлення про помилку.

Найпростіший спосіб - залишити вихідний варіант функції і обробляти виключення System.DivideByZeroException:

writeln ( 'Розподіл на 0');

Відмінність від виведення всередині функції полягає в тому, що при розробці програми ми самі визначаємо заходів, яких треба виконувати при обробці виключення. Це може бути специфічне повідомлення про помилку, висновок в файл помилок або порожній оператор (в разі, коли потрібно беззвучно погасити виняток).

Однак, дане рішення має істотний недолік: виключення System.DivideByZeroException буде порушено і при a = 1 і не буде пов'язано з функцією mymod. Для усунення такої вади визначимо власний клас виключення і порушимо його в функції mymod:

function mymod (a, b: integer): integer;

Схожі статті