Давайте відступимо та скористаємось іншим прикладом, який обчислює середнє арифметичне масиву значень.
Якщо вхідний масив порожній (або нульовий), чи можете ви обгрунтовано виконати запит абонента? Ні. Які варіанти? Ну, ви могли:
- подати / повернути / кинути помилку. використовуючи умову вашої кодової бази для цього класу помилок.
- документа, що таке значення, як нуль, буде повернуто
- документ про повернення призначеного недійсного значення (наприклад, NaN)
- документ, що магічне значення буде повернуто (наприклад, min або max для типу або якесь сподіваюче орієнтовне значення)
- оголосити результат не визначеним
- оголосити дію не визначеною
- тощо.
Я кажу, дайте їм помилку, якщо вони дали вам недійсний вклад і запит не може бути виконаний. Я маю на увазі сильну помилку з першого дня, щоб вони зрозуміли вимоги вашої програми. Зрештою, ваша функція не в змозі відповісти. Якщо операція не змогла (наприклад, скопіювати файл), то ваш API повинен надати їм помилку, з якою вони можуть зіткнутися.
Таким чином, це може визначити, як ваша бібліотека обробляє помилкові запити та запити, які можуть не працювати.
Дуже важливо, щоб ваш код був послідовним у тому, як він обробляє ці класи помилок.
Наступна категорія - визначити, як ваша бібліотека обробляє запити дурниць. Повертаючись до прикладу подібного Вашим - давайте використовувати функцію , яка визначає , чи існує файл в дорозі: bool FileExistsAtPath(String)
. Якщо клієнт передає порожній рядок, як ви впораєтесь із цим сценарієм? Як щодо порожнього чи нульового масиву, переданого void SaveDocuments(Array<Document>)
? Виберіть свою бібліотеку / базу коду та будьте послідовними. Мені трапляється вважати ці випадки помилками і забороняю клієнтам робити безглузді запити, позначаючи їх як помилки (через твердження). Деякі люди будуть сильно протистояти цій ідеї / дії. Я вважаю це виявлення помилок дуже корисним. Це дуже добре для розміщення питань у програмах - з хорошою локалізацією до програми, яка порушує правопорушення. Програми набагато чіткіші та правильніші (враховуйте еволюцію вашої кодової бази) і не записуйте цикли в межах функцій, які нічого не роблять. Таким чином, код менший / чистіший, і чеки, як правило, висуваються на місця, де може бути введена проблема.