Я певний час обдумував цю проблему і постійно знаходжу застереження та суперечності, тому сподіваюся, що хтось може зробити висновок щодо наступного:
Виняткові переваги над кодами помилок
Наскільки мені відомо, від роботи в галузі протягом чотирьох років, читання книг і блогів і т. Д. Поточна найкраща практика поводження з помилками - це викидати винятки, а не повертати коди помилок (не обов'язково код помилок, а тип, що представляє помилку).
Але - мені це здається суперечить ...
Кодування до інтерфейсів, а не реалізацій
Ми кодуємо інтерфейси або абстракції для зменшення зв'язку. Ми не знаємо або не хочемо знати конкретний тип та реалізацію інтерфейсу. Тож як ми можемо знати, які винятки нам слід шукати, щоб зловити? Реалізація могла б кинути 10 різних винятків, або не може закинути жодного. Коли ми ловимо виняток, то, безумовно, ми робимо припущення щодо впровадження?
Якщо тільки - інтерфейс має ...
Технічні умови виключення
Деякі мови дозволяють розробникам заявляти, що певні методи кидають певні винятки (наприклад, Java використовує throws
ключове слово.) З точки зору викликового коду це здається прекрасним - ми чітко знаємо, які винятки нам можуть знадобитися.
Але - це, здається, говорить про ...
Витікаюча абстракція
Чому інтерфейс повинен визначати, які винятки можна кинути? Що робити, якщо впровадженню не потрібно викидати винятки або потрібно викидати інші винятки? На рівні інтерфейсу немає можливості дізнатися, які винятки може захотіти викид.
Тому...
Прийти до висновку
Чому переваги винятків, коли вони (на мої очі) суперечать кращим практичним програмам? І якщо коди помилок такі погані (і мені не потрібно продавати на пороки кодів помилок), чи є інша альтернатива? Яке сучасне (або скоро стане) стан управління помилками, який відповідає вимогам найкращих практик, як зазначено вище, але не покладається на виклик коду, який перевіряє повернене значення кодів помилок?