Я слышал и читал, что хорошие методы OO не будут создавать исключение для пользовательского ввода. Однако эта логика заставляет меня немного почесать голову. Подумайте об истории здесь. Вернувшись к программированию на C, я мог бы написать такую функцию, как:
int validateUserInfo(struct info)
{
//...
}
Звонящий будет делать что-то вроде:
int errorCode = validateUserInfo(info);
if (errorCode != 0)
handleError(errorcode);
Насколько я помню, обработка исключений была написана, чтобы избежать возврата условий ошибки в качестве возвращаемого значения для методов, таких как показанные выше. Тем не менее, если я не использую обработку исключений для проверки информации о пользователе, не вернусь ли я к возвращению некоторого условия о неверных данных, которое заставляет меня иметь оператор if для проверки недействительных данных, чтобы изменить мой «успешный» поток выполнения?
Теперь кажется, что мне нужно проверить возвращаемые значения и включить в try / catch. Метод validateUserInfo в классе C ++ / C # / Java может генерировать исключение для «исключительной ошибки» и возвращать ошибки проверки «неверные данные» в качестве возвращаемого значения или некоторого другого механизма. Разве это не делает код более сложным из-за какого-то «правила OO»?
Конечно, пурист OO вернется с некоторой альтернативой, так что мне не придется возвращать ошибку проверки «неверные данные» в попытке аннулировать этот сценарий, но факт в том, что где-то кто-то будет писать код для проверки для проверки ошибки, а также написания блока try / catch для исключений.
Если обработка исключений идет медленно, разработчики компилятора должны исправить это, чтобы сделать это быстрее. Это не должно быть причиной для исключения исключений.