194 votes

Quand utiliser "Try" dans un nom de méthode?

Nous discutions avec nos collègues sur ce que cela signifie si le nom de la méthode commence par "Try".

Il y avait les opinions suivantes:

  • Utilisez "Essayer" lorsque la méthode peut renvoyer une valeur nulle.
  • Utilisez "Essayer" lorsque la méthode ne déclenchera pas d'exception.

Quelle est la définition officielle? Que dit "Try" dans le nom de la méthode? Y a-t-il un écrit officiel à ce sujet?

159voto

Erik Schierboom Points 6100

Ceci est connu comme la TryParse modèle et a été documenté par Microsoft. L' officiel des Exceptions et de la Performance page MSDN dit:

Envisager la TryParse modèle pour les membres qui peuvent lever des exceptions dans les scénarios courants pour éviter des problèmes de performance relatifs aux exceptions.

Ainsi, si vous avez le code pour lesquels des cas d'utilisation signifie qu'il peut lever une exception (comme l'analyse d'un int), le TryParse motif de sens.

128voto

Yossarian Points 8601

(Corrigé) Il existe des lignes directrices officielles, comme l'a suggéré Erik.

Quand je vois la méthode TrySomething , je suppose

  • ne jette pas
  • renvoie bool
  • si je m'attends à une valeur, elle est renvoyée via le paramètre 'out'
  • il existe une méthode Something , qui me permet de gérer toute exception moi-même. (edit, proposé par Jesse Webb)

9voto

Ashok Damani Points 2299

Je pense que vous devriez utiliser try quand vous voulez continuer. Peu importe qu'une méthode renvoie une valeur ou non.

Cas 1: si ça marche bien, vous pouvez procéder d'une manière ou d'une autre.

Cas 2: si ça ne revient pas: ça va encore; vous pouvez procéder d'une autre manière.

Et si vous attendez une valeur en sortie de cette méthode, utilisez le paramètre out .

Exemple

 int value
if (dictionary.TryGetValue("key", out value))
{
    // Proceed in some way
}
else
{
    // Proceed in some other way
}
 

6voto

Tigran Points 41381

Vous devez utiliser "Try" dans le nom de la méthode, lorsque vous voulez manifester le fait que l'invocation de la méthode peut produire un résultat non valide. D'après le standard .NET, il ne s'agit pas d'une fonction qui déclenche une exception, mais de la fonction qui retourne VALID ou NON_VALID , du point de vue du programme, value.

À la fin, tout cela sur la convention de nommage que vous décidez d'utiliser dans votre groupe.

6voto

fabigler Points 3472

Assurez-vous d'inclure try dans votre methodname si:

  • vous ne jetez pas toute exception
  • votre méthode a la signature suivante: bool TrySomething(input, out yourReturn)

Donc, fondamentalement, si nous utilisons try-méthodes nous avons seulement obtenir un résultat booléen de retour.

Ainsi, le code suivant ne va pas jeter des exceptions:

string input = "blabla";
int number;
if (int.TryParse(input, out number))
{
// wooohooo we got an int!
} else
{
//dooh!
}

Alors que ce code peut (et dans ce cas) lancer des exceptions:

string input = "blabla";
int number;
try
{
     number = int.Parse(input); //throws an exception
}
catch (Exception)
{
     //dooh!
}

À l'aide de Essayer des méthodes est plus sûr et plus sur la défensive à code. Aussi l'extrait de code #2 prend plus de performance à exécuter si ce n'est pas un entier.

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