Почему лучше генерировать исключение, а не возвращать код ошибки? - PullRequest
26 голосов
/ 12 января 2011

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

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

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

Пояснения / ссылки будут очень признательны.

Ответы [ 3 ]

35 голосов
/ 12 января 2011

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

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

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

11 голосов
/ 12 января 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...