Суть керування помилками полягає не в тому, в тому, як і в чому ви наздоганяєте проблеми. Це більше того, що ви робите після того, як дізнаєтесь про це .
По-перше - я б сказав, що немає жодної причини, через яку не слід обробляти жодну помилку, повернуту підлеглим методом. А помилок і винятків - це просто більше, ніж повернені значення або всі спроби / зловлення.
Просто кидати і ловити недостатньо.
Дивіться це : там, де автор пояснює, що лише ловивши, але нічого не роблячи, потенційно пригнічує виняток, і якщо тільки не зроблено достатньо, щоб скасувати шкоду - це гірше, ніж відпустити код просто так. Так само написання заяви "журналу", коли є відкритий файл чи помилка читання, може допомогти знайти причину, але - до моменту завершення програми це може призвести до пошкодження даних! Мало сказати, що у мене багато спроб / лову - важливіше знати, що вони насправді роблять!
Не зловживайте спробою і ловом.
Інколи - переважно ліниві або наївні програмісти думають, що після написання достатньої кількості спроб / лову, їхня робота закінчена і легка. Досить часто найкраще застосовувати коригувальні дії та відновити, а не просто скидати всю справу. Якщо цього неможливо зробити, потрібно вирішити, на якому рівні вам потрібно повернутися. Залежно від контексту та суворості, спроба вловити гніздування потребує ретельного проектування. Наприклад-
Дивіться це і це
Визначте, хто відповідає:
Одне з перших, що вам слід зробити, - це визначити, чи є вхід, що вводиться в порядок, лише неприйнятний (або поки що не обробляється) сценарій, або є винятком через оточення (наприклад, системна проблема, проблема з пам'яттю), або чи ця ситуація є повністю внутрішньою, що випливає з результатів алгоритму. У всіх випадках - рівень, на якому ви, можливо, захочете повернутися до дії чи ви хочете здійснити, значно відрізняється. У цьому світлі я хотів би сказати - що коли ви запускаєте код у виробництві, змусити abort () вийти з програми добре - але не для кожної дрібниці. Якщо ви виявите пошкодження пам’яті або поза пам’яттю, то безсумнівно, що навіть зробивши все можливе - все помре. Але якщо ви отримаєте вказівник NULL на вході - я б не
Визначте, що є найкращим можливим результатом:
Те, що всі речі потрібно робити за винятком, дуже критично. Наприклад, якщо в одному з наших випадків - медіаплеєр виявить, що він не має повних даних, які слід відтворювати користувачеві - що це робити?
- або пропустити якусь погану частину і побачити, чи може вона випереджати хороші речі.
- якщо це трапляється занадто багато, подумайте, чи можна перейти до наступної пісні.
- якщо він виявить, що не в змозі прочитати жоден файл - зупиніться і покажіть щось.
- в цей час
- під яким станом повинен гравець POP-UP для користувача та
- коли він повинен вести його самостійно?
- Якщо «зупиняти» речі, потрібно запитати відгук користувачів
- чи це повинно ставити ненав’язливу маленьку примітку про помилку в якомусь кутку?
Все це суб'єктивно - і, можливо, існує більше способів вирішення проблем, ніж ми банально. Все вищезазначене вимагає створити та зрозуміти глибину винятку, а також створити різні сценарії, до яких слід розвиватися.
Іноді нам потрібно перевірити винятки, перш ніж вони виникнуть. Найпоширеніший приклад - поділка на нульову помилку. В ідеалі потрібно перевірити, що перед цим винятком - і якщо це так - спробуйте поставити найбільш відповідне ненульове значення і рухатися далі, а не піти на самогубство!
Прибирати. Принаймні, це потрібно зробити! Якщо функція відбувається, щоб відкрити 3 файли, а четвертий не вдалося відкрити - зайве сказати, що перші 3 мали бути закриті. Делегування цієї роботи на шар вище - погана ідея. якщо ви вирішите зовсім не залишити без очищення пам'яті. І найголовніше - навіть якщо ви пережили виняток, повідомте вище, що все не пішло нормальним шляхом.
Те, як ми бачимо (нормальну) функціональність програмного забезпечення з точки зору різних ієрархій або шарів чи абстракцій, так само ми повинні класифікувати винятки, виходячи з їх суворості, а також за обсягом, в якому вони виникають, і вони впливають на інші частини системи - що визначає як найкращим чином поводитися з такими різними винятками.