Я понимаю, что "Исключения для исключительных случаев" [a], но, помимо повторения более и более , я так и не нашел фактическую причину этого факта .
Поскольку они останавливают выполнение, имеет смысл, что вы не захотите их для простой условной логики, но почему бы не проверить ввод?
Скажем, вы должны были пройти через группу входов и перехватить каждое исключение, чтобы сгруппировать их вместе для уведомления пользователя ... Я постоянно вижу, что это как-то "неправильно", потому что пользователи все время вводят неправильный ввод, но эта точка кажется быть на основе семантики .
Ввод не то, что ожидалось, и, следовательно, является исключительным. Создание исключения позволяет мне точно определить, что было неправильно, например StringValueTooLong или IntegerValueTooLow или InvalidDateValue или что-то еще. Почему это считается неправильным?
Альтернативой выбрасыванию исключения может быть либо возврат (и в конечном итоге сбор) кода ошибки, либо, что гораздо хуже, строка ошибки. Затем я либо показываю эти строки ошибок напрямую, либо анализирую коды ошибок, а затем показываю соответствующие сообщения об ошибках пользователю. Разве исключение не будет считаться гибким кодом ошибки? Зачем создавать отдельную таблицу кодов ошибок и сообщений, если их можно обобщить, за исключением функциональности, уже встроенной в мой язык?
Кроме того, я нашел эту статью Мартина Фаулера о том, как обрабатывать такие вещи - шаблон уведомлений. Я не уверен, как я вижу в этом что-то кроме Исключений, которые не останавливают выполнение.
a: Везде, где я читал что-либо об Исключениях.
--- Редактировать ---
Многие великие замечания были сделаны. Я прокомментировал большинство и + хорошие моменты, но я еще не полностью убежден.
Я не хочу защищать Исключения как правильное средство для разрешения проверки входных данных, но я хотел бы найти веские причины, почему практика считается настолько злой, когда кажется, что большинство альтернативных решений являются просто замаскированными исключениями.