Здравствуйте, L_G, Вы писали:
BFE>>Да, я видел такой подход. Такой подход ведёт к тому, что при всех подобных вызовах (и это не обязательно работа с файлами), код поимки исключения добавляется при каждом вызове функции и обрабатывается одинаково. Как если бы это было просто третье значение возвращаемое функцией.Выглядит нечитаемо и приводит к дублированию кода по всему проекту.
L_G>Если ситуация отсутствия хотя бы одного из файлов ПРЕДУСМАТРИВАЕТСЯ общей задачей, то логичнее проверить их наличие ДО вызова функции сравнения и соответственно среагировать (и это будет ветвление, а не обработка исключения). Если не предусматривается — то дефолтный обработчик всех необработанных никем исключений — как раз адекватное место для реакции на НЕпредусмотренные ситуации.
Это ошибочный подход из-за "многопоточности". Файл в любой момент может быть удалён кем-то ещё, поэтому проверка что-либо до вызова функции не гарантирует, что в момент вызова функции файл всё ещё будет существовать.
BFE>>Предположим, что вы пишите ТЗ. Какое уточнение вы добавите?
L_G>Возможна масса вариантов, зависящих от общей задачи: L_G>а) ситуация отсутствия файлов предусматривается, является ошибкой конфигурации/интеграции/пользователя и должна быть обработана ДО сравнения — тогда не обрабатывать исключения в сравнении, пусть они сигнализируют об ошибке ПРОГРАММИСТА (забывшего заранее обработать ситуацию)
см. выше.
L_G>б) ситуация отсутствия файлов НЕ предусматривается (невозможна/невероятна) — опять же не обрабатывать исключения в сравнении, пусть они сигнализируют об ИСКЛЮЧИТЕЛЬНОЙ ситуации
С трудом, но наверное такое можно себе представить.
L_G>Принцип YAGNI призван экономить время программиста (ну не получается заранее ВСЁ предугадать и написать УНИВЕРСАЛЬНЫЙ код; попытки его таки написать отнимают кучу времени сейчас и вовсе не гарантируют экономии времени в будущем). Сделать программирование интересным — это другая задача, с задачей экономии времени она слабо пересекается.
Ага, я такую "экономию" не один год уже наблюдаю: коллектив переписывает одну и ту же функциональность в который раз. И каждый раз с ошибками отличными от предыдущей реализации. На каждом конкретном месяце экономия есть, а в целом — упущенная выгода. Впрочем это проблемы работодателя, а не работников.
Кстати! Добавление исключения в функцию — это ведь как раз попытка написать универсальный код, особенно если эти исключения не будут задействованы.