Envoyé par
Alec6
J'ai une philosophie par laquelle les exceptions sont à utilisées comme erreur finales.
Non, pour les erreurs finales il y a les RuntimeException ou les Error.
Les RuntimeExceptions pour les erreurs de programmations (NullPointerException, ArrayOutofBound...) et les Error pour les problèmes plus importants généralement envoyé par la JVM (OutOfMemoryError, StackOverflowError).
Les Exceptions sont des "conditions" que les applications peuvent vouloir gérer (mauvaises saisie utilisateurs, problèmes réseaux, etc...).
Envoyé par
Alec6
Dans l'exemple avec les catchs je me retrouve avec des post conditions pour poursuivre (fermer la boite de dialogue, lancer un thread pour un timer etc...)
Généralement avec un bloc try/catch/finally il est possible de faire cela très proprement... je ne vois pas trop le problème...
Envoyé par
Alec6
J'ai perso tendance avec faire des pré condition (vérifier que le log et le password sont bons) avec une méthode spécificique qui renvoie un boolean etc...
Quel différence ? La vérification se fait lors de la connection dans un cas comme dans l'autre...
Envoyé par
Alec6
Je n'arrive pas encore à envisager les avantages et incovénients de chacun.
Avantage des Exceptions :
- Riche en information (avec un message et eventuellement d'autre information).
Elle oblige le developpeur à les traiter.
Evolution plus facile : on peut facilement ajouter une exception différente sans impacter l'utilisation de la méthode.
Le seul avantage à l'utilisation d'un code de retour pourrait être au niveau des performances, mais il faut vraiment atteindre des cas extrêmes pour voir la différence : Exception & Performance. De plus cette différences n'est vrai que si l'on ne traite pas l'erreur car elle correspond à l'allocation/désallocation des Exceptions. Or si on traite correctement l'erreur il faudra quand même allouer des messages d'erreurs, etc...
De plus c'est nettement plus objet comme approche : le code de retour devient utile et n'est plus simplement utilisé pour la gestion des erreurs...
Envoyé par
Alec6
J'ai l'impression qu'un bon code est un code qui n'envoi jamais d'exceptions, sauf erreur au niveau des controleurs etc...
Non, un bon code est un code qui traite correctement toutes les exceptions des méthodes qu'il appelle (sauf si il déclare les renvoyer lui-même)...
Envoyé par
Alec6
PS: en plus simple faut il faire racine de x et récupérer un exception (x étant négatif) ou si x<0 then return racine(x). Le throwable étant fait pour le cas ou (sécurité).
Cela dépend de ta méthode racine(x). Si tu veux authoriser les valeurs négatives pour renvoyer la racine de la valeur absolut cela ne pose pas de problème (mais ce n'est pas forcément logique)...
Maintenant si racine(x) avec x<0 doit provoquer une erreur, tu as trois solutions :
- 1. Retourner un code d'erreur (par exemple -1).
2. Retourner NaN (mais cela n'est possible que sur des Float et/ Double).
3. Renvoyer une exception
Maintenant prend le calcul suivant :
double d = racine(x) * racine(y);
- 1. L'erreur n'est pas décelable facilement (il faut faire deux if() pour la détecter).
2. Il suffit de vérifier que le résultat ne soit pas NaN (si un des membres d'une opération est NaN, alors le résultat est forcément NaN), mais on n'a pas de détail sur l'erreur à moins de faire des if() comme la solution 1.
3. On obtient une belle exception, avec eventuellement un 'joli' message...
Personnellement je prefere la troisième solution... En effet la detection de l'erreur est plus simple et plus complète...
Envoyé par
Alec6
A mon gout les exceptions servent surtout au bug tracking.
Encore un avantage pour les exceptions : si tu traites les erreurs avec un code de retour, il va te falloir généré des messages d'erreurs selon ces codes de retour. Ce qui est très lourds à coder. Du coup on se retrouve avec des messages d'erreurs du style "Erreur code 165" !!!
Partager