Quand est-ce “Essayer” censé être utilisé en C# les noms de méthode?
Nous avons discuté avec nos collègues sur ce que cela signifie si le nom de la méthode commence par "Essayer".
Il y avait les avis suivants:
- Utiliser "Essayer" lorsque la méthode peut retourner une valeur null.
- Utiliser "Essayer" lorsque la méthode ne permet pas de lever une exception.
Quelle est la définition officielle? Que signifie "Essayer" de le dire dans le nom de la méthode? Est-il un officiel de directive à ce sujet?
- +1 Personnes qui ont mis cette pensée bien dans les noms de leurs fonctions sont en fait la recherche pour "le gars à côté". Je ne sais pas pourquoi c'est arriver près de voix (et qui vient d'un mec qui sort de ce soir.)
- il a obtenu près de votes parce que "pour l'instant, cette question n'est pas un bon ajustement pour notre Q&Un format. Nous attendons des réponses à être étayée par des faits, des références, ou des compétences spécifiques, mais cette question sera susceptible de solliciter le débat, les arguments, les bureaux de vote, ou de l'étendue de la discussion."
- Il y a une déclaration officielle par Microsoft, qui répond à la question (voir ma réponse). Comment est-ce pas un fait?
- comme Erik mentionné, il est pris en charge par les faits. Aussi, il ya beaucoup de très expérimentés, les développeurs C#, ici, qui ont des compétences spécifiques afin de fournir une réponse valable. L'enfer, Eric Lippert est le chef du langage C# architecte. Je pense que vous pouvez appeler que des compétences spécifiques.
- La question est ouverte au débat. Vous ne pouvez pas forcer une équipe à suivre une certaine convention de nommage, et tout le monde aura ses propres conventions, pris en charge par quelle que soit l'expérience qu'ils ont eu. Il n'y a pas de bonne réponse à cette question est tout ce que je dis : chaque réponse est tout aussi correcte que l'autre.
- Que c'est la MME ligne directrice est fait. Que la MME ligne directrice est de la bonne orientation à utiliser est subjectif et discutable.
- que le MS pratiques exemplaires des lignes directrices sont le plus approprié pour un MS-langue spécifiée n'est pas vraiment discutable.
- Eh bien, je pense que dans la plupart des cas, il faut certainement aller avec le responsable de Microsoft recommandations. Et plus spécifiquement, dans ce cas j'ai l'impression que la recommandation est en fait un système très solide et sensible.
- Assurez-vous qu'il est. MS a, dans certains cas, les meilleures pratiques qui ne font sens, et qui ont beaucoup à gagner à se débarrasser. Qu'ils ont créé le langage ne signifie pas que tous leurs meilleures pratiques sont les meilleurs, tout comme Oracle n'a pas toujours le seul meilleures pratiques que vous devez utiliser en Java. En fait, je trouve un nombre important de MS étant donné que les meilleures pratiques soient au moins pas tout à fait correct.
- Que le MS de directive dans ce cas précis est approprié pour vous (ou moi même) ne change pas le fait que c'est une opinion. Ce n'est pas une question de fait, et donc n'est pas une question sur ce site.
- J'ai demandé à une question connexe, il y a un moment: stackoverflow.com/questions/5505391/...
Vous devez vous connecter pour publier un commentaire.
Ceci est connu comme la TryParse modèle et a été documenté par Microsoft. Le officiel des Exceptions et de la Performance page MSDN dit:
Donc 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.
Try
méthode dans un covariant de l'interface? On ne pouvait pas avoir unVariantLookup<out TValue>
interface comprend unbool TryGetValue(object key, out TValue value)
mais l'interface pourrait inclureTValue TryGetValue(object key, out bool success)
[l'utilisation deobject
pour la clé de permettre au code de demander une collection deCat
s'il contient uneAnimal
--si on lui demande de rechercher Fido (une instance deDog
), la collection aurait simplement indiquer qu'il ne contient pas de Fido]. Est ce un bon modèle, ou une autre préféré?ParseOrNull
etParse
) ou même le contraire de la convention (Parse
etParseOrThrow
) serait tout aussi fondamentale. L'avantage de directives de Microsoft, c'est qu'il favorise la cohérence: quand vous regardez une base de code que vous n'êtes pas familier avec, vous pouvez toujours comprendre, parce qu'il (le plus probable) utilise la généralisation de conventions approuvées par les propriétaires de la plate-forme.(Corrigé) Il est officiel, la ligne directrice, comme Erik suggéré.
Quand je vois
TrySomething
méthode, je suppose qu'ilbool
Something
méthode, qui me permet de gérer toute exception de moi-même. (modifier, suggéré par Jesse Webb)TryFoo
méthode, il y aura une semblableFoo
méthode qui me permet de gérer toutes les exceptions moi-même. Ces méthodes de signatures seront probablement différentes de sorte que leurs usages ne sont pas interchangeables, sans autres modifications de code.Je pense que vous devriez utiliser
try
lorsque vous voulez procéder. Il n'est pas question qu'une méthode retourne une valeur ou non.Cas 1: si il revient bien, vous pouvez procéder d'une certaine façon.
Cas 2: si il ne revient pas: il est toujours très bien; vous pouvez procéder d'une autre façon.
Et si vous vous attendez à une valeur de sortie de cette méthode, puis utiliser le
out
paramètre.Exemple
Vous devez utiliser le "juger" au nom de la méthode, quand vous voulez manifeste le fait que la méthode invokation peut produire non valide résultat. À la suite de la .NET standard, il est, par ailleurs, pas une fonction qui lève une exception, mais la fonction qui retourne des
VALID
ouNON_VALID
, à partir du point de vue du programme, de la valeur.À la fin, tout cela à propos de la convention de nommage de vous décider à utiliser dans votre groupe.
Assurez-vous d'inclure
try
dans votre methodname si: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:
Alors que ce code peut (et dans ce cas) lancer des exceptions:
À 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.
int number = int.Parse(input);
si vous souhaitez plus de sens dans ce contexte.int number;
déclaration avant le bloc try et lenumber = ...
affectation.TryLoadFile(path, out file)
woah, de la mémoire vive. Si l'appelant n'en attendent pas d'erreurs pour un mauvais chemin d'accès ou l'accès est refusé, mais une exception pour le whackier qui pourrait aller mal. Et le documenter.Oncle Bob donne l'exemple ci-dessous dans son livre Propre Code. Chaque fois que nous nous attendons à la levée d'une exception, nous pouvons utiliser la
Try
un préfixe à un nom de méthode:Et puis (adapté):
La
tryToShutDown
méthode ne permet pas de faire toute erreur de manipulation, parce que c'est de la responsabilité de l'sendShutDown
méthode.La
TryParse
patron de Microsoft viole le code de nettoyage de directive qui dit que nous devrions éviter de paramètres de sortie.Si nous ne sommes pas le développement d'une nouvelle version de C#, nous n'avons pas à respecter l'ensemble des lignes directrices de Microsoft. Parfois, ils ne sont pas les meilleurs.