Шрифт:
Мы должны знать, что функция
В этом случае нам пришлось бы проверить каждый вызов функции
Это имя можно использовать в коде, вызывающем функцию
Взгляните на этот код! Вы уверены, что он правильный? Он вам нравится? Легко ли его читать? Действительно, он уродлив (а значит, подвержен ошибкам). В результате наших неуклюжих попыток размер кода увеличился втрое, а детали реализации
Существует более правильное решение!
Посмотрите на исходный код.
Он может быть неверным, но, по крайней мере, мы можем понять, что должно происходить. Мы можем сохранить эту ясность, поместив проверку ошибки в функцию
5.5.2. Обработка ошибок в вызываемом модуле
Проверка корректности аргументов в функцию
Это решение выглядит неплохо, и нам больше нет необходимости писать проверку для каждого вызова функции
Отметим нечто интересное: мы почти бессознательно заменили подход “вызывающий модуль должен сам проверять аргументы” на подход “функция должна проверять свои собственные аргументы”. Одним из преимуществ второго подхода является то, что проверка аргументов осуществляется в единственном месте. Теперь необязательно просматривать вызовы функции по всей программе. Более того, проверка производится именно там, где эти аргументы используются, поэтому мы имеем всю информацию, необходимую для проверки.
Итак, применим найденное решение к функции
Этот фрагмент будет перехватывать все ошибки, возникающие в модулях, вызывающих функцию