alors voilà : j'aimerais connaître vos avis concernant l'utilisation des assertions en Java (parce que je code en java, mais la question est sans doute indépendante des langages) : quelle est la valeur ajoutée des assertions par rapport aux exceptions ?
je veux dire : les assertions sont utilisées dans les pré-conditions, pour vérifier qu'une valeur reçue est cohérente (pas 'null', pas négative, ni trop petite ni trop grande... selon le cas).
Mais tout ceci est tout aussi faisable avec des exceptions, d'où mon interrogation à ce sujet.
Ainsi, un code comme :
public void setXXX( XXX x )
{
if( x == null )
{
throw new NullPointerException( "bla bla bla" );
}
this._x = x;
}
deviendrait :
public void setXXX( XXX x )
{
assert x != null : "bla bla bla";
this._x = x;
}
le rendant de suite plus court sans pour autant rogner sur les vérifications. Mais est-ce le seul gain ?
# Sémantique
Posté par peck (site web personnel) . Évalué à 10.
Les assertions sont là pour vérifier des choses qui ne peuvent pas arriver. Lorsqu'une assertion est fausse c'est un bug. Elles sont faites pour êtres désactivables.
Les exceptions sont là pour traiter les cas particuliers, des choses qui ne sont pas prévues, mais qui peuvent arriver. Elles ne sont pas désactivables. Et participent au bon fonctionnement du programme.
[^] # Re: Sémantique
Posté par Thomas Douillard . Évalué à 2.
Pour ton "setXXX" c'est un bug: t'as un "con" qui n'a pas vérifié la précondition, c'est un bug qui fout la merde dans le programme, à priori t'as pas forcément envie de continuer le programme après ça (et de toute façon si tu le fais t'as de la chance si tout se casse pas la gueule peu de temps après même si ton programme est prévu pour).
Tu l'arrêtes, tu lances un débugger, et tu examines la pile d'appel, ce qui est de mon expérience pas toujours aussi simple avec une exception rattrapée.
[^] # Re: Sémantique
Posté par mickabouille . Évalué à 1.
Les erreurs se propagent comme des exceptions, mais ne peuvent/devraient pas être catchées.
Il est rare que les exceptions se propagent jusque au plus haut et arrêtent le programme. Les erreurs arrêtent le programme.
# Différence de taille
Posté par Zenitram (site web personnel) . Évalué à 3.
Bref, pour résumer
- Assertion = test si connerie de toi
- Exception = test si connerie des autres
# Merci
Posté par windu.2b . Évalué à 2.
[^] # Re: Merci
Posté par windu.2b . Évalué à 2.
-_-
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.