Мені цікаво, чи варто захищати від зворотного значення виклику методу, підтверджуючи, що вони відповідають моїм очікуванням, навіть якщо я знаю, що метод, який я викликаю, відповідатиме таким очікуванням.
ПОДАРУТЬ
User getUser(Int id)
{
User temp = new User(id);
temp.setName("John");
return temp;
}
ПОТРІБНО ЗРОБИТИ
void myMethod()
{
User user = getUser(1234);
System.out.println(user.getName());
}
АБО
void myMethod()
{
User user = getUser(1234);
// Validating
Preconditions.checkNotNull(user, "User can not be null.");
Preconditions.checkNotNull(user.getName(), "User's name can not be null.");
System.out.println(user.getName());
}
Я запитую це на концептуальному рівні. Якщо я знаю внутрішню роботу методу, якого я дзвоню. Або тому, що я написав це, або я його оглянув. І логіка можливих значень, які вона повертає, відповідає моїм умовам. Чи "краще" чи "доцільніше" пропустити перевірку, чи варто все-таки захищатись від неправильних значень, перш ніж приступити до методу, який я зараз впроваджую, навіть якщо він завжди повинен проходити.
Мій висновок з усіх відповідей (сміливо прийдіть до своїх):
Затвердити, коли- Метод показав, що в минулому погано поводився
- Метод з ненадійного джерела
- Метод використовується з інших місць, і не чітко зазначено, що це умови
- Метод відповідає вашому (детальніше див. Обрану відповідь)
- Метод чітко визначає, що він укладає контракт із чимось на зразок належного документа, типу безпеки, одиничного тестування або перевірки стану
- Продуктивність має вирішальне значення (у цьому випадку затвердження режиму налагодження може працювати як гібридний підхід)
Null
)? Це, мабуть, однаково проблематично, якщо ім'я ""
(не нульове, а порожній рядок) або "N/A"
. Або ви можете довіряти результату, або ви повинні бути належним чином параноїком.