Dois-je *toujours* privilégier les variables locales implicitement typées en C# 3.0 ?

StackOverflow https://stackoverflow.com/questions/17032

  •  08-06-2019
  •  | 
  •  

Question

Affûteur je le pense certainement, et dès le départ, cela vous incitera à convertir

Dooberry dooberry = new Dooberry();

à

var dooberry = new Dooberry();

Est-ce vraiment considéré comme le meilleur style ?

Était-ce utile?

La solution

C'est bien sûr une question de style, mais je suis d'accord avec Dare : Déclarations de type implicites C# 3.0 :Var ou pas var ?.Je pense qu'utiliser var au lieu d'un type explicite rend votre code moins lisible. Dans le code suivant :

var result = GetUserID();

Quel est le résultat ?Un int, une chaîne, un GUID ?Oui, c'est important, et non, je ne devrais pas avoir à fouiller dans le code pour le savoir.C'est particulièrement ennuyeux dans les exemples de code.

Jeff a écrit un article à ce sujet, disant il favorise var.Mais ce type est fou !

Je vois un modèle de réussite du stackoverflow :déterrez d'anciens messages de CodingHorror et (à la manière de Jeopardy) formulez-les en termes de question.

Autres conseils

Je ne l'utilise que lorsqu'il est clairement évident ce qu'est var.

clair pour moi :

XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

pas clair pour moi :

var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

Le meilleur résumé de la réponse que j'ai vu à cette question est Le commentaire d'Eric Lippert, qui dit essentiellement que vous devez utiliser le type concret si le type est important, mais pas autrement.Essentiellement, les informations de type doivent être réservées aux endroits où le type est important.

La norme dans mon entreprise est d'utiliser var partout, ce à quoi nous sommes parvenus après lire diverses recommandations, puis passer du temps à les essayer pour voir si le manque d'informations de type annotées était une aide ou un obstacle.Nous avons senti que c'était une aide.

La plupart des recommandations auxquelles les gens ont fait référence (par ex.Celui de Dare) sont des recommandations faites par des personnes qui n'ont jamais essayé de coder en utilisant var au lieu du type concret.Cela rend les recommandations pratiquement sans valeur, car elles ne parlent pas d’expérience, elles extrapolent simplement.

Le meilleur conseil que je puisse vous donner est de l’essayer par vous-même et de voir ce qui fonctionne pour vous et votre équipe.

@jongalloway - var ne rend pas nécessairement votre code plus illisible.

var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;

Le premier est tout aussi lisible que le second, et demande moins de travail

var myvariable = ResultFromMethod();

ici, vous avez raison, var pourrait rendre le code moins lisible.J'aime var parce que si je change une décimale en double, je n'ai pas besoin d'aller la changer à plusieurs endroits (et ne dis pas refactoriser, parfois j'oublie, laisse-moi juste var !)

MODIFIER: je viens de lire l'article, je suis d'accord.mdr.

J'ai le sentiment que ce sera l'une des questions les plus fréquemment posées au fil du temps sur Stack Overflow.Cela se résume à une préférence.Tout ce que vous pensez est plus lisible.Je préfère var lorsque le type est défini sur le côté droit car il est plus concis.Lorsque j'attribue une variable à partir d'un appel de méthode, j'utilise la déclaration de type explicite.

Il y a eu une bonne discussion à ce sujet @ Horreur de codage

Personnellement, j'essaie de réduire son utilisation au minimum, j'ai trouvé que cela nuisait à la lisibilité, surtout lors de l'attribution d'une variable à partir d'un appel de méthode.

L'un des avantages d'un outil comme ReSharper est que vous pouvez écrire le code comme vous le souhaitez et le reformater ensuite en quelque chose de plus maintenable.J'ai configuré R# pour toujours reformater de telle sorte que le type réel utilisé soit visible, cependant, lors de l'écriture de code, je tape presque toujours « var ».

De bons outils vous permettent d’avoir le meilleur des deux mondes.

John.

Cela n'a de sens que lorsque vous ne connaissez pas le type à l'avance.

Le « meilleur style » est subjectif et varie en fonction du contexte.

Parfois, il est bien plus facile d'utiliser « var » au lieu de taper un nom de classe extrêmement long, ou si vous n'êtes pas sûr du type de retour d'une fonction donnée.Je trouve que j'utilise davantage «var» lorsque je travaille avec Linq ou dans les déclarations de boucle.

D'autres fois, utiliser le nom complet de la classe est plus utile car il documente mieux le code que « var ».

Je pense que c'est au développeur de prendre la décision.Il n’existe pas de solution miracle.Il n'y a pas de « vraie voie ».

Acclamations!

Non, pas toujours mais j'irais jusqu'à dire la plupart du temps.Les déclarations de type ne sont pas beaucoup plus utiles que la notation hongroise ne l'a jamais été.Vous avez toujours le même problème : les types sont sujets à changement et même si les outils de refactoring sont utiles pour cela, ce n'est pas idéal par rapport à ne pas avoir à changer l'endroit où un type est spécifié sauf à un seul endroit, ce qui suit le Ne vous répétez pas principe.

Toute instruction sur une seule ligne où le nom d'un type peut être spécifié à la fois pour une variable et sa valeur doit absolument utiliser var, surtout lorsqu'il s'agit d'un long Generic< OtherGeneric< T,U,V>, Dictionary< X, Y>>>

Il y a un très bon article MSDN sur ce sujet, il décrit certains cas où vous ne pouvez pas utiliser var :

Les restrictions suivantes s'appliquent aux déclarations de variables typées implicitement :

  • var ne peut être utilisé que lorsqu’une variable locale est déclarée et initialisée dans la même déclaration ;La variable ne peut pas être initialisé à null, ou à un ou une fonction anonyme.
  • var ne peut pas être utilisé sur des champs de portée de classe.
  • Les variables déclarées à l’aide de var ne peuvent pas être utilisées dans l’initialisation expression.En d’autres termes, cette L’expression est légale :int je = (je = 20);mais cette expression produit un Erreur au moment de la compilation :var je = (je = 20);
  • Plusieurs variables à typage implicite ne peuvent pas être initialisées dans la même déclaration.
  • Si un type nommé var est dans la portée, alors le mot-clé var se résoudra en ce type et ne sera pas traité dans le cadre d’une section locale implicitement typée déclaration de variables.

Je recommanderais de le vérifier pour comprendre toutes les implications de l'utilisation de var dans votre code.

Je vois un modèle pour stackoverflow succès:déterrer d’anciens articles de CodingHorror et (style Jeopardy) les formuler en termes d’une question.

Je plaide innocent !Mais vous avez raison, cela semblait être une petite question relativement populaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top