Dans un débat sur les variables de retour, certains membres de l'équipe préfèrent une méthode pour retourner le résultat directement à l'appelant, tandis que d'autres préfèrent déclarer une variable de retour qui est ensuite renvoyée à l'appelant (voir les exemples de code ci-dessous)
L'argument pour ce dernier est qu'il permet à un développeur qui débogue le code de trouver la valeur de retour de la méthode avant qu'il ne revienne à l'appelant, ce qui rend le code plus facile à comprendre: Cela est particulièrement vrai lorsque les appels de méthode sont connectés en guirlande.
Existe-t-il des directives pour déterminer laquelle est la plus efficace et / ou existe-t-il d'autres raisons pour lesquelles nous devrions adopter un style plutôt qu'un autre?
Merci
private bool Is2(int a)
{
return a == 2;
}
private bool Is3(int a)
{
var result = a == 3;
return result;
}
result
avant de le renvoyer.stloc.0
etldloc.0
dans la deuxième version). Mais je pense que cela ne se produit qu'en mode débogage. Et ce n'est pas vraiment important ici de toute façon.a = b = c;
eta == b == c
, j'éviterais d'écrire quelque chose qui ressemblea = b == c
si vous le pouvez. Quand j'ai vu pour la première fois une ligne de code comme ça, il m'a fallu quelques secondes pour comprendre ce qui se passait. Ce code s'est démarqué. Je voudrais gifler les parenthèsesa == 3
, mais StyleCop ne l'aime pas - une bonne raison d'utiliser la version numéro un. Autre chose: c'est essentiellement un lambda, commea => (a == 3)
. Pourquoi ajouter une ligne de code à une fonction triviale déjà gonflée?Réponses:
Étant donné que j'utilise Resharper avec Visual Studio, Ctrl-RV (ou Ctrl-Alt-V, si vous utilisez les liaisons de touches Resharper / IntelliJ) transforme votre premier exemple en votre deuxième exemple. Donc, quand je veux déboguer, je peux le faire assez facilement. Et si j'oublie de le remettre, je ne me sentirai pas mal parce que Ctrl-RI le remettra à nouveau pour le rendre plus facile à lire.
Sérieusement, perdez votre temps à discuter de choses plus importantes. Comme où placer vos accolades ou espaces principaux par rapport aux onglets.
la source
Personnellement, je trouve le premier exemple plus facile à lire. Vous pouvez toujours le déboguer, en définissant un point d'arrêt dans l'instruction de retour et en l'ajoutant
a == 2
à la fenêtre de surveillance ou en utilisant la surveillance rapide.Mais c'est vraiment une question de préférence personnelle. Les deux versions sont OK.
la source
Lorsque le code est aussi facilement lisible que votre exemple, il n'y a rien de mal à renvoyer le résultat d'une opération logique telle que
return a == 2
. Cependant, si la valeur de retour est une instruction plus complexe ou ressemble à quelque chose commealors vous voudrez utiliser des variables pour stocker des morceaux de cela en premier et simplifier l'instruction de retour, pour des raisons de lisibilité.
la source
Dans un exemple simple comme celui-là, l'un ou l'autre est OK.
Pour des exemples plus compliqués, je préfère la deuxième voie. C'est seulement parce qu'il est plus lisible et que d'autres devront probablement maintenir le code.
la source
result
, qui est lui-même un identifiant complètement non descriptif et inutile.