Давайте вернемся назад и используем другой пример, который вычисляет среднее арифметическое для массива значений.
Если входной массив пуст (или равен нулю), можете ли вы разумно выполнить запрос вызывающей стороны? Нет. Какие у тебя варианты? Ну, вы могли бы:
- представить / вернуть / выбросить ошибку. используя соглашение вашей кодовой базы для этого класса ошибок.
- документ, что будет возвращено значение, такое как ноль
- документ о том, что будет возвращено указанное недействительное значение (например, NaN)
- документ о том, что будет возвращено магическое значение (например, минимальное или максимальное значение для типа или некоторое, возможно, ориентировочное значение)
- объявить результат не определено
- объявить действие не определено
- и т.п.
Я говорю, дайте им ошибку, если они дали вам неправильный ввод и запрос не может быть завершен. Я имею в виду серьезную ошибку с первого дня, чтобы они поняли требования вашей программы. В конце концов, ваша функция не в состоянии ответить. Если операция может завершиться неудачей (например, скопировать файл), тогда ваш API должен выдать им ошибку, с которой они могут иметь дело.
Таким образом, это может определить, как ваша библиотека обрабатывает искаженные запросы и запросы, которые могут быть неудачными.
Для вашего кода очень важно быть последовательным в том, как он обрабатывает эти классы ошибок.
Следующая категория - решить, как ваша библиотека обрабатывает бессмысленные запросы. Возвращаясь к примеру подобного Вашим - давайте использовать функцию , которая определяет , существует ли файл в пути: bool FileExistsAtPath(String)
. Если клиент передает пустую строку, как вы справляетесь с этим сценарием? Как насчет пустого или нулевого массива, переданного в void SaveDocuments(Array<Document>)
? Выберите свою библиотеку / кодовую базу и будьте последовательны, Я считаю, что в этих случаях ошибки, и запрещаю клиентам делать бессмысленные запросы, помечая их как ошибки (через утверждение). Некоторые люди будут сильно сопротивляться этой идее / действию. Я считаю это обнаружение ошибок очень полезным. Это очень хорошо для обнаружения проблем в программах - с хорошей локализацией для программы-нарушителя. Программы намного понятнее и правильнее (учитывайте эволюцию вашей кодовой базы) и не записывают циклы внутри функций, которые ничего не делают. Таким образом, код становится меньше / чище, и проверки обычно выталкиваются в места, где может возникнуть проблема.