Souvent, lorsque j'écris une fonction, je veux m'assurer que ses entrées sont valides afin de détecter ces erreurs le plus tôt possible (je crois que cela s'appelle des préconditions). Quand une condition préalable échoue, j'ai toujours levé une exception. Mais je commence à douter que ce soit la meilleure pratique et, sinon, des affirmations seraient plus appropriées.
Alors, quand devrais-je faire quoi: quand est-il approprié d'utiliser une assertion et quand est-il approprié de lever une exception?
exceptions
assertions
Gablin
la source
la source
Réponses:
Les assertions ne doivent être utilisées que pour vérifier des conditions dont la fausse doit être logiquement impossible (lire: contrôles de cohérence). Ces conditions ne doivent être basées que sur les entrées générées par votre propre code. Toute vérification basée sur des entrées externes doit utiliser des exceptions.
Une règle simple que j'ai tendance à suivre est la vérification des arguments de fonctions privées avec des assertions et l'utilisation d'exceptions pour les arguments de fonctions publiques / protégées.
la source
Les assertions sont utilisées pour rechercher des erreurs de programmation. Vos programmes doivent fonctionner aussi bien lorsque toutes les assertions sont supprimées.
Les exceptions, par contre, concernent des situations pouvant survenir même lorsque le programme est parfait; ils sont causés par des influences externes, telles que le matériel, le réseau, les utilisateurs, etc.
la source
La pratique de programmation typique consiste à compiler des assertions à partir de versions de production / publication. Les assertions aideront uniquement lors des tests internes à détecter l'échec des hypothèses. Vous ne devez pas assumer le comportement d'agences externes, vous ne devez donc pas affirmer sur les événements du réseau ou de l'utilisateur. Il est également recommandé d'écrire du code de traitement pour les versions de production en cas d'échec d'une assertion.
Par exemple en C,
Les exceptions doivent être intégrées aux versions de production. L'alternative à l'exception est de renvoyer une erreur et non des assertions.
la source
Un problème avec les assertions pour moi est qu'elles sont désactivées par défaut en Java.
Nous utilisons une stratégie d’échec en premier selon laquelle le programme - qui peut fonctionner sans surveillance depuis des années - doit s’arrêter le plus tôt possible pour éviter la corruption des données en cas de données incorrectes (sous une forme inattendue). C’est pour cela que nous utilisons la vérification, et en utilisant des assertions, nous risquons fondamentalement qu’ils ne soient pas actifs.
la source