Мой конкретный случай здесь заключается в том, что пользователь может передать строку в приложение, приложение анализирует ее и назначает ее структурированным объектам. Иногда пользователь может ввести что-то недопустимое. Например, их вклад может описать человека, но они могут сказать, что их возраст - «яблоко». Правильное поведение в этом случае - откатить транзакцию и сообщить пользователю, что произошла ошибка, и ему придется повторить попытку. Может быть требование сообщать о каждой ошибке, которую мы можем найти во входных данных, а не только в первой.
В этом случае я утверждал, что мы должны выбросить исключение. Он не согласился, сказав: «Исключения должны быть исключительными: ожидается, что пользователь может ввести неверные данные, так что это не исключительный случай». Я действительно не знал, как аргументировать эту точку зрения, потому что по определению слова он похоже, прав.
Но я понимаю, что именно поэтому исключения были изобретены в первую очередь. Раньше вам приходилось проверять результат, чтобы увидеть, произошла ли ошибка. Если вы не смогли проверить, плохие вещи могут произойти без вашего ведома.
Без исключения каждый уровень стека должен проверять результат методов, которые они вызывают, и если программист забывает проверить один из этих уровней, код может случайно продолжить работу и сохранить недопустимые данные (например). Кажется, больше ошибок подвержены таким образом.
В любом случае, не стесняйтесь исправлять все, что я сказал здесь. Мой главный вопрос: если кто-то говорит, что исключения должны быть исключительными, как мне узнать, является ли мой случай исключительным?