![Обробка винятків (обробка) Обробка винятків](https://images-on-off.com/images/208/obrabotkaisklyucheniy-8b24b90b.png)
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;