Contre les exceptions vérifiées
Pendant de nombreuses années, je n'ai pas pu obtenir de réponse satisfaisante à la question suivante : Pourquoi certains développeurs sont-ils si opposés aux exceptions vérifiées? J'ai eu de nombreuses conversations, lu des articles de blog et lu les opinions de Bruce Eckel (qui a été la première personne à s'exprimer contre les exceptions vérifiées).
J'écris actuellement du nouveau code et je prête beaucoup d'attention à la façon dont les exceptions sont gérées. J'essaie de comprendre le point de vue de la foule "nous n'aimons pas les exceptions vérifiées", mais je n'arrive toujours pas à le comprendre.
Chaque conversation que j'ai eue s'est terminée par la même question non résolue... Permettez-moi de développer :
En général (par la conception de Java),
Un argument que j'entends souvent est que si une exception se produit, tout ce que le développeur a à faire est de quitter le programme.
Un autre argument courant que j'entends est que les exceptions vérifiées rendent plus difficile la refactorisation du code.
Pour l'argument "Je vais quitter", vous devez toujours afficher un message d'erreur pertinent même si vous quittez. Si vous tergiversez simplement sur la gestion des erreurs, vos utilisateurs ne seront pas très satisfaits lorsque le programme se terminera sans raison claire de sa fermeture.
Pour ceux qui "cela rend le refactoring difficile", cela indique que le niveau d'abstraction approprié n'a pas été choisi. Plutôt que de déclarer une méthode pour lancer une IOException, celle-ci doit être convertie en une exception plus appropriée à ce qui se passe.
Je ne suis pas fou d'emballer le catch(Exception) de Main (ou dans certains cas catch(Throwable), qui garantit que le programme se termine correctement, mais j'attrape toujours ceux spécifiques dont j'ai besoin Exception. Faire cela permet je dois au moins afficher un message d'erreur approprié
La question à laquelle les gens ne répondent jamais est :
Si vous lancez une sous-classe RuntimeException
au lieu d'une sous-classe Exception
, comment savez-vous ce que
devrait attraper ?
Si la réponse est d'intercepter l'exception, alors vous gérez toujours les erreurs du programmeur de la même manière que les exceptions système. Cela me semble faux.
Si vous attrapez Throwable, vous gérez toujours les exceptions système et les erreurs de VM (et les erreurs similaires) de la même manière. Cela me semble faux.
Si la réponse est de détecter uniquement les exceptions dont vous savez qu'elles sont levées, alors comment savoir quelles exceptions ont été levées ? Que se passe-t-il lorsque le programmeur X lève une nouvelle exception et oublie de l'attraper ? À mon avis, c'est dangereux.
Je dirais que le message qui montrerait la trace de la pile est faux. Les gens qui n’aiment pas les exceptions vérifiées ne le pensent-ils pas ?
Donc, si vous n'aimez pas les exceptions vérifiées, pouvez-vous expliquer pourquoi et veuillez répondre à la question sans réponse.
Je ne cherche pas de conseils sur le moment d'utiliser l'un ou l'autre modèle, je cherche pourquoi les gens s'étendent de RuntimeException mais pas d'Exception, et/ou la raison pour laquelle ils renvoient RuntimeException après avoir intercepté l'exception au lieu d'ajouter des lancers à la méthode. J'aimerais comprendre les motivations des gens pour ne pas aimer les exceptions vérifiées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!