Je suis ingénieur logiciel professionnel depuis environ un an maintenant, après avoir obtenu un diplôme en informatique. Je connaissais les assertions depuis un certain temps en C++ et C, mais je ne savais pas du tout qu'elles existaient en C# et .NET jusqu'à récemment.
Notre code de production ne contient aucune assertion et ma question est la suivante...
Devrais-je commencer à utiliser les alertes dans notre code de production ? Et si oui, quand son utilisation est-elle la plus appropriée ? Serait-il plus judicieux de faire
Debug.Assert(val != null);
ou
if ( val == null )
throw new exception();
4 votes
La dichotomie que vous avez mise en place est l'indice. Il ne s'agit pas de l'un ou l'autre pour les exceptions et les assertions, mais de l'un et l'autre pour le code défensif. Ce que vous cherchez à comprendre, c'est quand faire l'un ou l'autre.
7 votes
J'ai lu une fois que quelqu'un suggérait qu'une exception ou une autre méthode de plantage est appropriée pour les conditions où "Il n'y a aucun moyen de se remettre raisonnablement de ceci", et qu'en plus un assert est approprié pour les conditions où "Ceci ne devrait jamais arriver, jamais". Mais quelles circonstances réalistes satisfont ces dernières conditions sans satisfaire également les premières ? Venant d'un environnement Python où les assertions restent actives en production, je n'ai jamais compris l'approche Java/C# consistant à désactiver une partie de la validation en production. Le seul cas que je vois vraiment est celui où la validation est coûteuse.
0 votes
En rapport : Quand les assertions doivent-elles rester dans le code de production ?
3 votes
Personnellement, j'utilise les exceptions pour les méthodes publiques et les assertions pour les méthodes privées.