69 votes

Retour dans le bloc de capture?

Est-il erroné d'avoir une déclaration de retour dans un bloc catch? Quelles sont les alternatives?
c'est à dire:

 public bool SomeFunction()
{
    try
    {
        //somecode
        return true;
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.message);
        return false;
    }

}
 

50voto

Svisstack Points 9001

Vous pouvez revenir normalement du bloc catch. C'est normalement un bon code fonctionnel.

21voto

Mark Rushakoff Points 97350

Une alternative serait de stocker la valeur de retour dans une variable temporaire:

public bool SomeFunction()
{
    bool success = true;
    try
    {
        //somecode
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.message);
        success = false;
    }

    return success;
}

Mais personnellement, je trouve la façon dont vous l'ai écrit (avec un fourre-tout de l'instruction catch) pour être plus lisible. D'autre part, si vous vous attendez à l'exception spécifiques et vous pourriez avoir de multiples chemins pour revenir succès ou pas...

try
{
    DoTheImportantThing();
    DoTheOtherThingThatMightFailButWeDontCare();
}
catch (DontCareAboutItException ex)
{
    log.Info(ex);
}
catch (Exception ex)
{
    log.Error(ex);
    return false;
}

return true;

Alors à mon avis, vous êtes mieux de pousser le retour des déclarations aussi proche de la fin que possible.

Comme une note de côté, en fonction de l'application, pensez à l'enregistrement de l'exception que vous attraper plutôt que de simplement montrer à l'utilisateur. Exceptions enregistrées sont beaucoup plus fiables que de l'utilisateur, raconte ce qui s'est passé.

14voto

Darin Dimitrov Points 528142

Si dans le bloc try il y a déjà une déclaration return, je mettrais probablement l'autre retour à la fin de la fonction:

 try
{
    //somecode
    return true;
}
catch(Exception ex)
{
    MessageBox.Show(ex.message);
}
return false;
 

Et ceci afin d’éviter les retours multiples si plusieurs exceptions doivent être gérées.

11voto

Andrew Points 797

Ce n'est pas grave, sachez que certains codes peuvent être exécutés après l'instruction de retour (la valeur de retour sera encaissée).

     try
    {
        return;
    }
    catch(Exception ex)
    {
        return;
    }
    finally
    {
        //some code
    }
 

8voto

Bart Points 1312
 public bool SomeFunction()
{
    try
    {
        //somecode
        return true;
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.message);
    }
    return false;
}
 

Personnellement, je mets la déclaration de retour au bas de la méthode au lieu de dans le bloc. Mais les deux vont bien. Tout est une question de lisibilité (subjective) et de directives dans votre organisation.

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