Duplicates possibles: strong>
Pourquoi les blocs de capture vides sont-ils une mauvaise idée?
y a-t-il une raison valable pour toujours ignorer un attrapé Exception p>Connaissez-vous des situations quand un bloc de capture vide n'est pas le mal absolu? p>
xxx pré> blockQuote>
5 Réponses :
Il y a beaucoup de questions à ce sujet, essayez de regarder: p>
Pourquoi les blocs de capture vides sont-ils une mauvaise idée? p>
de la réponse acceptée de ce poste: p>
Capture d'essai généralement vide est une mauvaise idée, car vous avalez silencieusement une condition d'erreur, puis continuez l'exécution. De temps en temps, cela peut être la bonne chose à faire, mais souvent, c'est un signe qu'un développeur a vu une exception, ne savait pas quoi faire à ce sujet, et il y avait ainsi utilisé une capture vide pour faire taire le problème. P>
C'est l'équivalent de programmation de la mise en place de la bande noire sur un éclairage de moteur. P> blockQuote>
Jetez un coup d'œil à Ce a >, il décompose essentiellement le type d'exceptions que vous pourriez rencontrer en quatre catégories, dont aucune ne doit être traitée par un bloc de capture vide. P>
Pourtant, je peux vous montrer un code parfaitement raisonnable qui contient un bloc de capture vide. Un bloc de capture vide ne signifie pas "ne rien faire".
Non, un bloc de capture vide signifie que quelque chose s'est mal passé, je ne sais pas quoi, mais simplement l'ignorer et continuer. VB 6 avait une commande "sur une erreur reprise" suivante "qui le fait automatiquement pour vous et c'était un délice de déboguer le code poivré avec elle.
Ce qui devrait être fait dans le bloc de capture pour l'exception vexante qui est lancée par contrôler.begininvoke code> si le contrôle est éliminé avant la fin de la méthode et si la seule raison pour laquelle appeler la méthode était de laisser le contrôle Sachez que cela devrait redessiner? Je considérerais à peine un tel événement comme étant la peine d'être connecté. Pour être sûr, le bloc de capture vide indique un défaut de codage, mais le défaut est l'absence de méthode code> trybeginVoke code>.
Je dirais que vous devriez au moins fournir une sorte de commentaire ou un message enregistré indiquant que ce que vous avez mis dans l'essai {} jeté une exception et c'est pourquoi vous ne faites rien. p>
Je l'ai utilisé pour certaines bibliothèques auto-écrites où j'ai besoin d'une sorte de Bool TRYSomettion (objet OUT) CODE> Fonction ou
objet TRYSomething () Code> Où l'appel sous-jacent n'a pas t fournir tout autre mécanisme comme une exception. Dans ce cas, j'utilise un bloc de capture vide et retourner
false code> ou
null code> (en fonction de la signature de fonction).
exemple pour prouver bloc de capture vide h3> < Pré> xxx pré> p>
Mais parlons-nous dans ce cas encore sur une prise vide? Vous définissez une valeur de retour dans ce cas.
@Christophelambrechts: Exemple supplémentaire pour prouver que le bloc de capture serait vide.
Dans ce cas, je placerais le renvoyer false; code> instruction dans le bloc de capture.
Ceci est une exception typique de vexation. Voir Exceptions Vexing | Aventures fabuleuses dans le codage pour plus de détails.
axiom: p>
Les blocs de capture vides sont un mal absolu p> blockQuote>
N'essayez pas de trouver votre chemin autour de cela. Juste en essayant de trouver des cas où ils ne sont pas un mal absolu signifie que vous gaspillez des cycles cérébraux précieux. N'essayez pas de trouver un motif ici, pensez »HMM, devrais-je mettre un bloc de capture vide ici?" P>
Si vous trébuchez sur un bloc de captures vide dans le code de quelqu'un, vous venez de tomber sur dette technique a>. Répare le. Même en ajoutant une déclaration de journalisation dans un bloc de capture vide, vous ferez un meilleur endroit dans le monde. P>
Vide
attrape code> Les blocs sont toujours diaboliques, sauf lorsqu'il est utilisé avec vide
ESSAYER code> blocs.
Vide
attrape code> Les blocs ne sont pas toujours pervers. Vide Tous correspondances B> Les blocs de capture sont toujours diaboliques.
@ Frédéric Hamidi, votre commentaire accepté comme une réponse