Il n'est pas tout à fait vrai que "assert fails only in debug mode".
En Construction de logiciels orientés objet, 2e édition de Bertrand Meyer, l'auteur laisse une porte ouverte à la vérification des préconditions en mode release. Dans ce cas, lorsqu'une assertion échoue, une exception de violation d'assertion est levée ! Dans ce cas, il n'y a pas de récupération de la situation : quelque chose d'utile pourrait être fait cependant, et c'est de générer automatiquement un rapport d'erreur et, dans certains cas, de redémarrer l'application.
La raison en est que les préconditions sont généralement moins coûteuses à tester que les invariants et les postconditions et que, dans certains cas, l'exactitude et la "sécurité" de la version finale sont plus importantes que la rapidité. robustesse (la capacité du programme à se comporter de manière sûre lorsque son comportement n'est pas correct, c'est-à-dire lorsqu'un contrat est rompu).
Faut-il toujours laisser les contrôles de précondition activés ? Cela dépend. C'est à vous de décider. Il n'y a pas de réponse universelle. Si vous créez un logiciel pour une banque, il peut être préférable d'interrompre l'exécution avec un message d'alarme plutôt que de transférer 1 000 000 $ au lieu de 1 000 $. Mais qu'en est-il si vous programmez un jeu ? Peut-être avez-vous besoin de toute la vitesse possible, et si quelqu'un obtient 1000 points au lieu de 10 à cause d'un bogue que les conditions préalables n'ont pas détecté (parce qu'elles ne sont pas activées), pas de chance.
Dans les deux cas, vous devez
T y ,
S W