Les checked exception seraient elles d’autres reliquats de Java ?

Vous le savez sans doute, il y a peu avait lieu JavaOne, dixième édition. A l’occasion de cette conférence, qui est LA grand messe du monde Java, bien des choses se sont dit. J’aimerais revenir ici sur cet article de Stephen Colebourne traitant des exceptions : Checked Exceptions (#bijava). Comme il le dit, il s’agit d’une intéressante suite au non moins intéressant article traitant du Next Big Language, qui pourrait très bien être « simplement » une version incompatible de Java, et surtout débarrassée de toutes ses vieilleries (mais je ne reviendrai pas là-dessus).
Non.
Au lieu de ça, je voudrais me contenter de faire un article me too.
C’est-à-dire que, moi aussi, j’ai commencé par faire des checked exceptions par défaut, réservant les runtime pour les cas « mortels ». C’était bien. Je pouvais voir exactement ce qui pouvait déconner (par exemple, une erreur d’entrée/sortie, ou de SQL, ou que sais-je encore). Le seul problème, c’est que je ne pouvais pas forcément traiter l’exception. Du coup, je devais les faire toutes remonter de plus en plus haut, ce qui polluait bien sûr les signatures de mes méthodes.
Du coup, un beau jour … ou était-ce une nuit ? bref … j’ai pris la décision pour mes nouveaux développements d’encapsuler les exceptions dans des Runtime pour les laisser se balader comme elles voulaient, et gérer celles qui m’intéressaient au niveau qui m’intéressait.
C’est ce que j’ai fait dans gaedo. Et ça a été une révélation !
Le code est bien plus simple, bien plus lisible. Bien sûr, j’ai toujours une hiérarchie de classes d’exceptions pour encapsuler tous les cas (en essayant de faire en sorte que chaque cas dispose de sa propre classe d’exception). Mais maintenant, cette hiérarchie me sert à définir des messages d’erreur, et plus à polluer mes signatures de méthode, ce qui est un avantage énorme, pour quelqu’un qui passe son temps à lire du code.

 

Donc maintenant, je peux le dire. Comme Stephen Colebourne, je suis pour la suppression des checked exceptions.
Publicités

5 réflexions sur “Les checked exception seraient elles d’autres reliquats de Java ?

  1. Ben moi, je suis pour la suppression des Threads. C’est compliqu??, la plupart des d??veloppeurs font n’importe quoi avec et le code est beaucoup plus simple quand il n’y en a pas.S??rieusement l’article de St??phane Colebourne est une insulte ?? l’esprit critique de ses lecteurs ("si vous ??tes contre la suppression, c’est que vous avez dix ans de retard" : qui est-il pour l’estimer ?).Je ne me fait pas un d??fenseur des checked exception, mais l’article de Colebourne me donne envie de l’??tre. Et c’est dommage de le reprendre ?? son compte, comme lui, sans ajouter d’argument.

  2. Ton code est devenu plus simple parce que tu as choisi d’ignorer (ou potentiellement, de rater) tous les cas d’erreur.Ignorer completement les checked exceptions n’est pas une solution viable.

  3. <div>Je n'ai pas vraiment choisi de les ignorer. j'ai en revanche choisi une approche plus &quot;fail fast&quot;. Dans un job pr??c??dent, j'ai vu un d??veloppeur catcher syst??matiquement toutes les exceptions dans des boucles sans code. Qu'est-ce qui est lie mieux ? Supprimer les probl??mes en les cachant sous le tapis, ou faire en sorte qu'ils soient aussi visibles que possible ? Rendre les exceptions unchecked, c'est leur donner une visibilit?? maximale : au moment o?? elles arrivent, soit elles sont g??r??es pr??cis??ment, soit le thread qui les ex??cute plante en donnant un message d'erreur parfaitement explicite. Et personnellement, je pr??f??re que mon application plante pour une raison que je comprend, plut??t que, par exemple, hein, parce que l'application essaye de faire quelque chose de dbile qui lance des exceptions en pagaille, qui sont malheureusement toutes catch??es et balanc??es dans les poubelles de l'histoire.<br> </div><div><br></div><div>En revachne, je ne trouve pas le code plus simple : je documente toujours les exceptions que je lance, et aucun appel de m??thode n'a perdu de param??tre. ce qui dispara??t en revanche, ce sont les multiples throws ou catch/throw qui n'ajoutent strictement rien ?? la compr??hension du code. Pour le coup, je serais tent?? de dire que l'absence d'??quivalent de checked exception dans les langages inspir??s de Java (Groovy, Scala, ….) est un signe de la direction que prend l'histoire informatique sur ce sujet : oui, ajouter les exceptions ?? java a ??t?? une bonne id??e. Mais non, les rendre checked n'a pas ajout?? grand chose ?? la lisibilit??/maintenabilit?? du code. Ce serait m??me tout le contraire, puisqu'un outil comme PMD int??gre des r??gles concernant les exceptions qui ne sont pas vraiment consistantes … <a href="http://pmd.sourceforge.net/rules/strictexception.html">http://pmd.sourceforge.net/rules/strictexception.html</a></div&gt;

  4. C??dric et moi avons eu raison de te contredire, ton commentaire est d??j?? plus nuanc?? que juste une prise de partie.De mani??re g??n??rale, St??phane Colebourne a le m??rite de mettre des coups de pieds dans la fourmili??re et d’obliger ?? remettre en cause des id??es, mais il va trop loin, il tient pour finis des d??bats qui ne le sont pas. Non seulement dire "If you are still using or advocating checked exceptions then I’m afraid you skill set is 5 to 10 years out of date." une insulte pour ses lecteurs, mais en plus cela est une escroquerie, le d??bat d’expert a commenc?? sur cette page : http://cafe.elharo.com/programming/bruce-eckel-is-wrong/qui date d’avril 2010 (2010, pas 2000 !).Par ailleurs, ses arguments ne sont pas corrects non plus. La conception, l’architecture logicielle, ont effectivement des effets de mode, mais on ne peut pas, comme par exemple dans le design (le vrai, Philip Starck, toussa) ??tre uniquement observateur de la mode et la suivre sans avoir une vision claire des arguments qui d??fendent une position.Or son article est une prise de position par rapport ?? un effet de mode : il explique que les frameworks ?? la mode (Spring, Hibernate, …) ont pris ce parti (sans doute pour des raisons techniques, et non pas de design), du coup, il faut faire pareil …panurgisme ?? l’horizon.Ton argument ?? propos de PMD est du m??me acabit. L’outil est formidable, mais les r??gles ?? prendre en compte rel??vent des d??cisions d’architecture d’un projet donn??.En ce qui concerne les checked Exception en Scala, il est expliqu?? dans ce commentaire http://cafe.elharo.com/programming/bruce-eckel-is-wrong/#comment-476967qu'actuellement il n’y a rien correspondant aux checked exception en Scala, mais que ??a allait peut-??tre venir (mais sans doute sous une forme diff??rente).Mon avis personnel est que les checked exceptions sont une bonne chose sur le principe, mais pas pratique, donc globalement mal utilis??e, que vouloir les supprimer sans r??fl??chir ?? quoi ??a sert, ce que ??a rend comme service, et les remplacer par autre chose de plus ad??quat, c’est jeter le b??b?? avec l’eau du bain.Bon, d’un autre c??t??, si on les supprime, ??a va clairement pas arr??ter la terre de tourner, la preuve, c’est que la plupart des langages sur terre n’ont pas de checked exceptions. Et pis de toutes fa??ons, un programme Java est cens?? ne pas fonctionner pour le pilotage d’une centrale nucl??aire ou d’une navette spatiale 🙂

  5. <div>Je retiens ton point selon lequel les checked exceptions sont une bonne id??e, mais mal impl??ment??e.<br></div><div><br></div><div>Je retiens aussi, et surtout, le fait que si on les supprime, ??a ne changera finallement pas grand chose : tout le code historique continuera ?? fonctionner exactement de la m??me mani??re, et on pourrait m??me imaginer que les gens continuent ?? placer le &quot;throws&quot; ?? la fin des m??thodes (faudrait que je voie ce que ??a donne dans gaedo) de mani??re ?? informer les utilisateurs sur tous les aspects du code.</div> <div><br></div><div>Bon, maintenant, sur la mani??re dont Colebourne lance la discussion fa??on catapulte troll du Seigneur des Anneaux, j'ai pas grand chose ?? dire : je ne fais pas mieux, et de toute fa??on, quand on en arrive ?? causer de la nature profonde des exceptions, c'est qu'on est un sacr?? geek :-)</div>

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s