143 votes

C’est une mauvaise habitude pour retourner à partir dans un try catch bloc finally ?

Donc, je suis tombé sur un certain code, ce matin, qui ressemblait à ceci:

try
{
    x = SomeThingDangerous();
    return x;
}
catch (Exception ex)
{
    throw new DangerousException(ex);
}
finally
{
    CleanUpDangerousStuff();
}

Maintenant ce code compile fine et fonctionne comme il se doit, mais il n'a tout simplement pas se sentir le droit de retour à partir de l'intérieur d'un bloc try, surtout si il ya un associé enfin.

Ma principale question est de savoir ce qui se passe si les enfin, déclenche une exception de lui-même? Vous avez en retour une variable, mais également une exception à gérer... donc, je suis intéressé de savoir ce que les autres pensent de retour à partir de l'intérieur d'un bloc try?

180voto

Mehrdad Afshari Points 204872

Non, il n'est pas une mauvaise pratique. Mettre return où il fait sens, améliore la lisibilité et la maintenabilité et rend votre code plus simple à comprendre. Vous ne devriez pas les soins finally bloc sera exécuté que si un return déclaration est produite.

24voto

Ed S. Points 70246

Enfin sera exceuted n'importe quoi, donc il n'a pas d'importance.

19voto

Conrad Points 460

Personnellement, je vous conseille d'éviter ce genre de code que je n'ai pas envie de voir le retour des déclarations avant de finalement consolidés.

Mon esprit est simple et processus des choses plutôt linéaire. Donc quand je marche à travers le code de fonctionnement à sec, j'aurai tendance à penser qu'une fois que je peux arriver à l'instruction de retour, tout suivre n'est pas n'importe qui, évidemment, est assez mauvais dans ce cas (non pas que cela aurait une incidence sur l'instruction de retour mais quels sont les effets secondaires pourraient être).

Ainsi, je voudrais organiser le code de sorte que l'instruction de retour apparaissent toujours après le enfin consolidés.

13voto

Spencer Ruport Points 24589

Cela peut répondre à votre question

http://stackoverflow.com/questions/421797/what-really-happens-in-a-try-return-x-finally-x-null-statement

À la lecture de cette question, il semble que vous pouvez faire une autre tentative de capture de la structure dans l'instruction enfin si vous pensez qu'il peut lever une exception. Le compilateur va comprendre quand le retour de la valeur.

Cela dit, il pourrait être préférable de restructurer votre code de toute façon juste pour ne pas vous embrouiller plus tard, ou quelqu'un d'autre qui peut être pas au courant de ce que bien.

7voto

Ifeanyi Echeruo Points 468

Fonctionnellement il n'y a pas de différence.

Cependant, il ya une raison pour ne pas faire cela. Plus les méthodes avec plusieurs points de sortie sont souvent plus difficiles à lire et à analyser. Mais cette objection a plus à voir avec le retour des déclarations de capture et enfin les blocs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X