Где лучшее место для проверки входных параметров функции: в вызывающей программе или в самой функции?
Поскольку я хотел бы улучшить свой стиль кодирования, я пытаюсь найти лучшие практики или некоторые правила для этой проблемы. Когда и что лучше.
В моих предыдущих проектах мы проверяли и обрабатывали каждый входной параметр внутри функции (например, если он не нулевой). Теперь я прочитал здесь в некоторых ответах, а также в книге Pragmatic Programmer, что проверка входного параметра является обязанностью вызывающей стороны.
Это значит, что я должен проверить входные параметры перед вызовом функции. Везде функция вызывается. И это поднимает один вопрос: не создает ли оно дублирование условий проверки везде, где вызывается функция?
Меня интересуют не только нулевые условия, но и проверка любых входных переменных (отрицательное значение для sqrt
функции, деление на ноль, неправильная комбинация состояния и почтового индекса или что-либо еще)
Существуют ли правила, как решить, где проверять условия ввода?
Я думаю о некоторых аргументах:
- когда обработка неверной переменной может варьироваться, полезно проверить ее на стороне вызывающей стороны (например,
sqrt()
функция - в некоторых случаях я могу захотеть работать с комплексным числом, поэтому я рассматриваю условие в вызывающей стороне) - когда условие проверки одинаково у каждого вызывающего, лучше проверить его внутри функции, чтобы избежать дублирования
- проверка входного параметра в вызывающей стороне происходит только одна перед вызовом многих функций с этим параметром. Поэтому проверка параметра в каждой функции не эффективна
- правильное решение зависит от конкретного случая
Я надеюсь, что этот вопрос не является дубликатом любого другого, я искал эту проблему, и я нашел похожие вопросы, но они не упоминают именно этот случай.