Обробка винятків: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Рядок 49:
 
У новіших мовах, наприклад в [[Java]], разом з «класичними» з'явилися винятки, що перевірялися. Обробка таких винятків перевіряється компілятором. Метод, в якому воно може виникнути (у тому числі і в методах, що викликаються) зобов'язаний або обробити його, або оголосити, що може викинути такий виняток.
 
===Переваги і недоліки===
Винятки, що перевіряються, знижують кількість ситуацій, коли виняток, який міг бути обробленим, викликав критичну помилку в програмі, оскільки за наявністю обробників стежить компілятор. Це може бути особливе корисно, якщо метод, який не міг викидати виняток типу X став це робити: компілятор автоматично відстежить всі випадки його використання і перевірить наявність відповідного обробника.
 
Проте, у винятків, що перевіряються, є і недоліки. По-перше, вони часто «примушують» обробляти те, з чим програміст в принципі справитися не може, наприклад помилку введення-виводу у веб-сервері. Це приводить до появи «дурних» обробників, які не роблять нічого або виводять стек виклику винятків і, у результаті, тільки засмічують код. По-друге це робить неможливим додавання нового винятку, що перевіряється, в методі, описаному в бібліотеці, оскільки це порушує зворотну сумісність. (Це вірно і для небібліотечних методів, але в цьому випадку проблема менш істотна).
 
У результаті, багато бібліотек оголошують всі методи як такі, що викидають деякий суперклас винятків (наприклад, Exception). В результаті, компілятор «примушує» писати обробники винятків навіть там, де вони, здавалося б, не потрібні.
 
[[Категорія:Програмування]]