Подтвердить что ты не робот

Почему лучше исключать исключение, а не возвращать код ошибки?

Обработка устаревшей ошибки имеет тенденцию следовать методу, в котором все функции возвращают код в зависимости от успеха/сбоя. Вы должны проверить этот код и обработать (если ошибка) соответственно.

Современные языки программирования, однако, следуют за моделью исключения, где, если что-то исключительное случается, что невозможно обработать, исключение получает бросок - который продолжает всплывать до его обработки.

Мой вопрос почему мы перешли к модели исключений? В чем причины этого? Почему это лучше?

Пояснения/ссылки будут высоко оценены.

4b9b3361

Ответ 1

Я писал об этом подробно: Исключения против статуса возвращает, но кратко:

  • Исключения оставляют ваш код чистым от всех проверок, необходимых при проверке статуса при каждом вызове,
  • Исключения позволяют использовать возвращаемое значение функций для действительных значений,
  • Исключения могут содержать больше информации, чем возврат статуса,
  • Самое главное: исключения не могут быть проигнорированы посредством бездействия, в то время как возврат статуса может.

Чтобы развернуть последнюю точку: если вы забудете делать то, что вы должны делать со статусом, вы игнорируете ошибки. Если вы забудете делать то, что вы должны делать с исключениями, исключение превращается в внешний слой программного обеспечения, где оно становится видимым.

Ответ 2

Вот несколько причин

  • Игнорирование исключения требует действия разработчика, в то время как игнорирование плохого возвращаемого значения требует ровно 0 действий. Теоретически это делает вероятность того, что разработчик будет обрабатывать ошибку или игнорировать ее или даже не осознавать, что это происходит.
  • Обеспечивает более чистое разделение между точкой ошибки и обработкой. Это не приводит к механическому распространению ошибки в каждой точке между ними.
  • Исключения могут иметь большую и более богатую информационную нагрузку, чем простой код ошибки. Есть способы сделать это с помощью кодов ошибок, но это скорее запоздалая мысль и немного громоздка.

Ответ 3

Коды состояния обычно лучше, чем исключения, в случаях, когда они представляют случаи, когда обрабатывается функция код быстрого вызова. Проблема с кодами состояния заключается в том, что если код немедленного вызова не обрабатывает их, это, вероятно, ничего не сделает. Если код генерирует исключение, а код немедленного вызова не готов к его обработке, исключение будет распространяться на код, который, по крайней мере, утверждает, что он подготовлен.