Что-то не так с throw new Exception ("Операция успешно завершена"); для возврата результата проверки? - PullRequest
1 голос
/ 16 ноября 2011

Является ли распространенным использование исключений для передачи состояний результатов операций, или я должен использовать функцию return только для передачи значений?

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

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

Я не уверен, и я хотел бы услышать ваши опыт и какой метод является более распространенным.

редактирование: В настоящее время я думаю сделать что-то подобное, а не использовать исключения. (для архивации опыта.)

switch(login())
case: "success": /* success code; */ break;
case: "wrongpassword": $messagestoshow[]="wrong password"; break; 
...

Ответы [ 4 ]

5 голосов
/ 16 ноября 2011

Является ли распространенным использование исключений для передачи состояний результатов операций, или я должен использовать только возврат функции для передачи значений?

Я не думаю, что это распространено.Я надеюсь это не распространено.

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

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

Обсуждение ситуации, когда возникает исключительная ситуация, несколько бесполезно.Некоторые языки используют исключения для обозначения ситуаций, таких как конец итерации (Python) , в то время как в других использование исключения может привести к нежелательным эффектам, которые могут возникнуть только в исключительных ситуациях (C ++) .

4 голосов
/ 16 ноября 2011

Распространенная мантра дизайна - говорить, что исключения не должны использоваться в качестве GOTO (в основном то, что вы делаете в этом случае). Вместо этого вы должны полагаться на возвращаемое значение.

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

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

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

2 голосов
/ 16 ноября 2011

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

Исключения следует использовать для исключительных обстоятельств, и успех не является исключительным.Вместо этого используйте возвращаемое значение.

1 голос
/ 16 ноября 2011

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

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