Обробка винятків: відмінності між версіями
[неперевірена версія] | [неперевірена версія] |
Вилучено вміст Додано вміст
м робот додав: simple:Error Handling |
Іванко1 (обговорення | внесок) правопис, оформлення |
||
Рядок 1:
'''Обро́бка ви́нятків''' ({{lang-en|exception handling}})
В цілому, при виникненні виняткової ситуації, управління передається деякому заздалегідь призначеному обробникові. У деяких мовах, обробник може відновити виконання програми з місця виникнення винятку. Таким чином, обробка помилок передається на вищий рівень і забезпечується можливість так званого нелокального виходу, тобто передачі управління на деяку «віддалену», можливо заздалегідь невідому, точку програми через довільне число викликів функцій.
Рядок 8:
Використання винятків в цілях контролю помилок підвищує читаність коду, оскільки дозволяє відокремити обробку помилок від самого алгоритму, і полегшує програмування і використання компонентів інших розробників.
Основний недолік винятків
В складних програмах виникають великі «нагромадження» операторів try
== Підтримка в різних мовах ==
Більшість сучасних мов програмування, таких як [[ActionScript]], [[Ada]], [[C++]], [[Common Lisp]], [[D (мова програмування)|D]], [[Delphi (мова програмування)|Delphi]], [[Eiffel]], [[Java]], [[JavaScript]], [[OBJECTIVE-C]], [[OCaml]], [[Ruby]], [[PHP]] (з версії 5), [[Python]], [[SML]], [[Глагол (мова програмування)|Глагол]], всі мови платформи [[.NET]] тощо, мають вбудовану підтримку обробки винятків. У цих мовах, при виникненні виняткової ситуації (точніше, винятку, підтримуваного мовою), відбувається розкручування стека викликів до першого обробника винятків відповідного типу, і управління передається обробникові.
За винятком незначних відмінностей в синтаксисі, існує лише пара варіантів обробки винятків. У
Деякі мови також допускають спеціальний блок ('''else'''), який виконується, якщо жодного винятку не згенерувано у відповідній області дії. Частіше зустрічається можливість безумовного виконання коду ('''finally''', '''ensure'''), навіть у випадку якщо виняток було викинуто, але не оброблено. Помітним виключенням є Сі++, де такої конструкції немає. Замість неї використовується автоматичний виклик деструкторів об'єктів. Разом з тим існують нестандартні розширення Сі++, що підтримують і функціональність '''finally''' (наприклад в [[MFC]]).
Рядок 55:
Проте, у винятків, що перевіряються, є і недоліки. По-перше, вони часто «примушують» обробляти те, з чим програміст в принципі справитися не може, наприклад помилку введення-виведення у [[веб-сервер]]і. Це приводить до появи «дурних» обробників, які не роблять нічого або виводять стек виклику винятків і, у результаті, тільки засмічують код. По-друге це робить неможливим додавання нового винятку, що перевіряється, в методі, описаному в [[бібліотека (програмування)|бібліотеці]], оскільки це порушує зворотну сумісність. (Це вірно і для небібліотечних методів, але в цьому випадку проблема менш істотна).
У результаті, багато бібліотек оголошують всі методи як такі, що викидають деякий суперклас винятків (наприклад, Exception).
[[Категорія:Програмування]]
|