Quelle est la différence entre la gestion des exceptions java et l’affirmation d’une condition quelconque?
son savoir que assert est de deux types.
Quelle est la différence entre la gestion des exceptions java et l’affirmation d’une condition quelconque?
son savoir que assert est de deux types.
Utilisez les assertions de la logique interne des contrôles au sein de votre code, et normal des exceptions pour les conditions d'erreur à l'extérieur de votre code de contrôle.
N'oubliez pas que les assertions peuvent être activés et désactivés - si vous pensez à des choses comme la validation d'arguments, qui doivent être explicites à l'aide d'exceptions. (Vous pouvez toutefois choisir d'effectuer la validation d'arguments sur privé méthodes utilisant des assertions, au motif qu'une infraction à ce point est dû à un bug interne plutôt que d'une erreur externe.)
Sinon c'est toute raisonnable (OMI) pour utiliser les exceptions pour tout. Personnellement, je ne pas utiliser les assertions beaucoup à tous, mais c'est une question de préférence personnelle, dans une certaine mesure. (Il peut certainement être objectif arguments pour et contre des assertions, mais il n'est pas suffisamment claire pour enlever la préférence au total.)
Java affirmations sont construites au-dessus de Java exceptions et la gestion des exceptions. En effet, lorsqu'un Java assertion échoue, le résultat est un AssertionError exception qui peut être pris comme toute autre exception Java. Les principales différences entre les exceptions et les affirmations sont:
assert
déclaration. Comparer les suivantes:if (x != y) { throw new SomeException (x != y"); } assert x != y;
Note: certaines personnes disent que vous devez toujours exécuter le code de production avec l'affirmation de la vérification éteint. J'ai tendance à être en désaccord avec cela comme une déclaration générale. Si votre code de production est connue pour être stable ET vous avez besoin de serrer les dernières tranches de rendement hors de lui, puis en éteignant des assertions est bon. Mais, si un (dire) 10% de gain de performance n'est pas un réel problème, je préfère avoir une application de mourir avec une erreur d'assertion si l'alternative est de continuer et de corrompre ma base de données.
EDIT: @Mario Ortegón a commenté ainsi:
La "mise hors tension" à cause de l' les assertions peuvent être utilisés pour vérifier l' résultat d'un algorithme optimisé par la comparaison de sa mise en œuvre à l'encontre d'un le bien-connu, mais lente, de l'algorithme. Donc, dans le développement, il est OK pour invoquer que
O(N^3)
méthode d'affirmer que l'O(log N)
l'algorithme fonctionne comme prévu. Mais ce est quelque chose que vous ne voulez pas dans de production.
Si oui ou non vous pensez que c'est une bonne pratique pour éteindre les assertions de production, il est certainement une mauvaise pratique pour écrire des assertions qui ont un impact significatif sur les performances lorsqu'il est activé. Pourquoi? Car cela signifie que vous n'avez plus la possibilité de permettre à des affirmations de la production (à retrouver la trace d'un problème) ou dans votre stress / test de capacité. À mon avis, si vous avez besoin d' O(N^3)
pré/post-condition de test, vous devez le faire dans vos tests unitaires.
Exception est un mécanisme de vérifier si la mise en œuvre est en cours d'exécution sans aucune attendus ou inattendus, des erreurs ou pas. Ainsi, nous voyons que les exceptions sont utilisés essentiellement pour la manipulation de même les conditions imprévues au cours de l'exécution d'une application dans une meilleure façon, et par conséquent, avec les exceptions de manière efficace les résultats dans une application robuste.
Les Assertions ne devrait jamais être une partie de la mise en œuvre de certaines fonctionnalités de l'application. Ils devraient seulement être utilisés pour vérifier les hypothèses - juste pour être sûr que ce que nous avons supposé tandis que la conception de la solution est en fait valable dans la pratique ainsi.
référence: http://geekexplains.blogspot.com/2008/06/asserions-in-java-assertions-vs.html
Exemple d'une bonne utilisation de l'herbicide Assert:
assert flibbles.count() < 1000000; // too many flibbles indicate something is awry
log.warning("flibble count reached " + flibbles.count()); // log in production as early warning
Personnellement, je pense qu'Affirmer devrait seulement être utilisé quand vous savez que quelque chose est à l'extérieur souhaitable limites, mais vous pouvez être sûr qu'il est raisonnable de continuer. Dans tous les autres cas (n'hésitez pas à souligner les circonstances je n'ai pas pensé) utiliser les exceptions à l'échec dur et rapide.
La clé de compromis pour moi est de savoir si vous voulez ramener un live/système de production avec une Exception pour éviter la corruption et faciliter le dépannage, ou si vous avez rencontré une situation qui ne devrait jamais être autorisé à poursuivre inaperçu dans test/debug versions, mais pourrait être autorisé à poursuivre dans la production (de l'enregistrement d'un avertissement bien sûr).
cf. http://c2.com/cgi/wiki?FailFast voir aussi mon c# copie de cette réponse: Debug.Affirmer vs Spécifiques Exceptions lancées
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.