Де найкраще визначити вхідні параметри функції: абонента або самої функції?
Оскільки я хотів би вдосконалити свій стиль кодування, я намагаюся знайти найкращі практики чи деякі правила щодо цього питання. Коли і що краще.
У попередніх проектах ми перевіряли та обробляли кожен вхідний параметр всередині функції (наприклад, якщо він не є нульовим). Зараз я прочитав тут у деяких відповідях, а також у книзі Прагматичного програміста, що перевірка вхідного параметра є відповідальністю за виклику.
Отже, це означає, що я повинен перевірити вхідні параметри перед викликом функції. Всюди викликається функція. І це викликає одне питання: чи не створюється це дублювання умови перевірки скрізь, де функція називається?
Мене цікавлять не нульові умови, а валідація будь-яких вхідних змінних (від'ємне значення для sqrt
функціонування, ділення на нуль, неправильне поєднання стану та поштового індексу чи що-небудь ще)
Чи є деякі правила, як вирішити, де перевірити стан введення?
Я думаю про деякі аргументи:
- коли обробка недійсної змінної може змінюватися, добре перевірити її в стороні виклику (наприклад,
sqrt()
функція - у деяких випадках я можу захотіти працювати зі складним числом, тому я ставлюся до стану у виклику) - коли умова перевірки однакова у кожного абонента, краще перевірити її всередині функції, щоб уникнути дублювання
- валідація вхідного параметра у виклику відбувається лише одна перед викликом багатьох функцій за допомогою цього параметра. Тому перевірка параметра в кожній функції не є ефективною
- правильне рішення залежить від конкретного випадку
Я сподіваюся, що це питання не є дублюючим жодним іншим, я шукав цю проблему і знайшов подібні запитання, але вони не згадують саме про цей випадок.