Якби вам довелося обрати свої улюблені (розумні) методи оборонного кодування, якими вони були б? Хоча мої нинішні мови - Java та Objective-C (з фоном на C ++), не соромтесь відповідати будь-якою мовою. Акцент робиться тут на розумних оборонних техніках, крім тих, про які вже знають 70% + нас. Отож, настав час заглибитись у ваш мішок хитрощів.
Іншими словами, спробуйте придумати інший, ніж цей нецікавий приклад:
if(5 == x)
замістьif(x == 5)
: щоб уникнути ненавмисного призначення
Ось кілька прикладів інтригуючих найкращих практик оборонного програмування (конкретні мовні приклади є на Java):
- Блокуйте свої змінні, поки не зрозумієте, що вам потрібно їх змінити
Тобто ви можете оголосити всі змінні, final
поки не дізнаєтесь, що вам потрібно буде змінити їх, і в цей момент ви можете видалити final
. Один загальновідомий факт, що це також справедливо для парамметів методу:
public void foo(final int arg) { /* Stuff Here */ }
- Коли трапиться щось погане, залиште слід слідів
Існує ряд речей, які ви можете зробити, коли у вас є виняток: очевидно, реєстрація в ньому та проведення певного очищення було б декількома. Але ви також можете залишити слід доказів (наприклад, встановлення змінних значень дозорних, таких як "UNABLE TO LOAD FILE" або 99999, було б корисно в налагоджувальнику, якщо у вас catch
випадково пройде повний виняток -блок).
- Що стосується узгодженості: чорт у деталях
Будьте однакові з іншими бібліотеками, якими ви користуєтесь. Наприклад, у Java, якщо ви створюєте метод, який витягує діапазон значень, робить нижню межу включною, а верхню межу виключною . Це зробить це узгодженим з такими методами, як String.substring(start, end)
функціонує. Ви знайдете всі ці типи методів у Sun JDK таким чином, щоб вони поводилися таким чином, оскільки різні операції, включаючи ітерацію елементів, узгоджуються з масивами, де показники знаходяться від нуля ( включно ) до довжини масиву ( виключно ).
То які ваші улюблені оборонні практики?
Оновлення: Якщо ви ще цього не зробили, не соромтесь звучати. Я даю можливість отримати більше відповідей, перш ніж я виберу офіційну відповідь.