Je me demande si je devrais me défendre contre la valeur de retour d'un appel de méthode en validant qu'il répond à mes attentes même si je sais que la méthode que j'appelle répondra à ces attentes.
DONNÉ
User getUser(Int id)
{
User temp = new User(id);
temp.setName("John");
return temp;
}
DEVRAIS-JE
void myMethod()
{
User user = getUser(1234);
System.out.println(user.getName());
}
OU
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());
}
Je pose cette question au niveau conceptuel. Si je connais le fonctionnement interne de la méthode que j'appelle. Soit parce que je l'ai écrit ou que je l'ai inspecté. Et la logique des valeurs possibles qu'elle renvoie répond à mes conditions préalables. Est-il «préférable» ou «plus approprié» d'ignorer la validation, ou devrais-je tout de même me défendre contre de mauvaises valeurs avant de poursuivre avec la méthode que j'implémente actuellement, même si elle doit toujours réussir.
Ma conclusion de toutes les réponses (n'hésitez pas à venir à la vôtre):
Affirmez quand- La méthode a montré un mauvais comportement dans le passé
- La méthode provient d'une source non fiable
- La méthode est utilisée depuis d'autres endroits et n'indique pas explicitement ses post-conditions
- La méthode est proche de la vôtre (voir la réponse choisie pour plus de détails)
- La méthode définit explicitement son contrat avec quelque chose comme un bon document, une sécurité de type, un test unitaire ou une vérification post-condition
- Les performances sont essentielles (dans ce cas, une assertion de mode de débogage pourrait fonctionner comme une approche hybride)
Null
)? C'est probablement aussi problématique si le nom est ""
(pas nul mais la chaîne vide) ou "N/A"
. Soit vous pouvez faire confiance au résultat, soit vous devez être paranoïaque de manière appropriée.