52 votes

ReSharper et var

Double Possible:
Pourquoi ne ReSharper souhaitez utiliser 'var' pour tout?

J'ai ReSharper 4.5 et avons trouvé qu'il inestimable pour l'instant, mais j'ai un souci; Il semble vouloir faire de chaque déclaration de variable implicite(var). Comme un relativement nouveau développeur combien devrais-je faire confiance ReSharper quand il s'agit de cela? Prendre l'extrait de code ci-dessous à partir d'une méthode que les Peintures de l'Onglet en-Têtes.

TabPage currentTab = tabCaseNotes.TabPages[e.Index];
Rectangle itemRect = tabCaseNotes.GetTabRect(e.Index);
SolidBrush fillBrush = new SolidBrush(Color.Linen);
SolidBrush textBrush = new SolidBrush(Color.Black);
StringFormat sf = new StringFormat
{
    Alignment = StringAlignment.Center,
    LineAlignment = StringAlignment.Center
};

Resharper veut me faire changer tous les 5 à var. J'ai lu le suivant poste similaire, l'Utilisation du mot-clé var en C#, mais je voudrais savoir à partir d'un ReSharper point de vue.

Merci!

44voto

Joel Coehoorn Points 190579

Resharper est surtout préoccupé de vous aider à refactoriser le code, et l' var mot-clé permet généralement de refactoring plus facile. Par exemple, si les valeurs de retour de ces fonctions de modification d'un compatibile type, vous n'avez pas à modifier ce code. C'est donc maintenant un peu plus facile à refactoriser votre tabCaseNotes type, par exemple.

Personnellement, je suis souvent enclins à laisser vos deux premières lignes, parce que j'aime voir le nom de type d'une variable explicitement répertoriés quelque part sur la ligne où la variable est déclarée. Si quoi que ce soit, je pourrais chercher une interface à utiliser au lieu de cela, de sorte que j'ai aussi obtenir les mêmes "générique-ness", comme avec l' var mot, sans rien perdre d'important lisible des informations de type. Cependant, je serais certainement utiliser var pour fillBrush, textBrush, et sf.

19voto

eglasius Points 26221

Vous n'avez pas besoin d'avoir le type dans la ligne pour le rendre plus lisible, c'est une question de préférence personnelle. J'aime le var variation:

var currentTab = tabCaseNotes.TabPages[e.Index];
var itemRect = tabCaseNotes.GetTabRect(e.Index);
var fillBrush = new SolidBrush(Color.Linen);
var textBrush = new SolidBrush(Color.Black);
var sf = new StringFormat
   {
      Alignment = StringAlignment.Center,
      LineAlignment = StringAlignment.Center
   };

Mise à jour: je vais ajouter un controversé de vue sur la question. Sauf si je suis de lecture de code à partir d'un livre, je n'ai pas l'habitude de soins quel est le type spécifique pour la compréhension de certaines lignes de code que je lis. Envisager l' .GetTableRectangle(e.Index), pour lequel vous n'êtes pas montrer le code qui fonctionne sur elle:

var itemRect = tabCaseNotes.GetTableRectangle(e.Index);
//do some operations on itemRect

Alors que la lecture de ce code spécifique je vais avoir plus à le comprendre à partir de l'exploitation sur itemRect que de son type. Il peut être IRectangle, Rectangle, CustomRectangle, et encore ne vous en dis pas beaucoup sur ce que fait le code avec elle. Au lieu de cela je me soucie plus de la itemRect.Hauteur, itemRect.La largeur ou la itemRect.GetArea() avec la logique.

Mise à jour 2: Comme d'autres l'ont souligné, vous pouvez la désactiver. Assurez-vous de garder l'équipe avec les mêmes pratiques, ou vous aurez probablement à faire des changements d'une manière ou l'autre chaque fois qu'une autre personne de toucher au code. Voir: http://www.jetbrains.com/resharper/features/codeTemplate.html

15voto

Steve Haigh Points 6261

Resharper ne voulez - vous utiliser var, il vous donne l'option. Si vous n'utilisez var il vous donnera alors la possibilité d'utiliser un type explicite, de sorte que vous ne pouvez pas gagner:-).

EDIT - intéressant lien de l'examen de la question.

Il semble qu'il peut être éteint, aller à Resharper -> Options -> Code d'Inspection -> Inspection de la Gravité et faites défiler vers le bas un peu pour voir les options liées à la var.

7voto

mrjedmao Points 1655

En C#, je préfère utiliser var partout. Pourquoi? Pour la même raison que j'utilise firstName au lieu de strFirstName ou amount plutôt que d' intAmount. Bien sûr, le plus verbeux est plus lisible sur un morceau de papier ou-comme vous l'avez souligné-un livre, mais aucun de mes code a montré dans un livre encore.

Maintenant, j'ai demandé à un co-travailleur de la mine a tout à l'arrière à propos de cette intAmount d'affaires et il a un très bon point. Il a dit que c'est utile dans un straight-up éditeur de texte, mais quand vous avez Intellisense, vous pouvez obtenir la même information, et plus simplement en planant au-dessus de la variable.

Enfin, bien que j'apprécie le support heureux que d'autres ont fait remarquer (c'est à dire à l'aide de var avec l' new déclaration) et l'argument est valide et fort, je suis enclin à se tenir loin des que sur la seule base de la cohérence et à court de main de lisibilité. Ma cohérence argument est que si la lisibilité est si important pour vous, alors pourquoi ne pas aussi utiliser intAmount donc vous pouvez indiquer le type de données plus tard dans le code?

7voto

Mark Sherretta Points 5272

Resharper pense que c'est une pratique exemplaire, mais certaines personnes ne sont pas d'accord, comme vous l'avez lu dans le post lié. J'aime utiliser des déclarations explicites pour une lisibilité accrue, mais pour chacune des leurs. Si vous souhaitez utiliser une déclaration explicite, vous pouvez désactiver la règle dans Resharper.

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