64 votes

Utilisation de variables locales implicitement typées

Je viens d'installer une version d'essai de ReSharper et l'une des premières choses que j'ai remarqué, c'est que toujours, il suggère de remplacer explicitement tapé des variables locales avec tapée implicitement, e.g:

public string SomeMethod(int aParam)
{
	int aNumber = SomeOtherMethod(aParam);
	// should be changed to:
	var aNumber = SomeOtherMethod(aParam);
}

Je pense explicitement les variables de type sont de plus lisible (plus explicite).

Que pensez-vous de ReSharper de la suggestion? Est-il un avantage en utilisant implicitement les variables de type? Quand avez-vous l'utilisation implicite/explicit vars?

74voto

Rene Points 905

Personnellement, je utiliser uniquement "var" quand je peut clairement distinguer le Type de variable par la simple lecture de la déclaration, par exemple:

var someVariable = new List<int>();

Dans l'exemple ci-dessus, il est manifeste que "var" se réfère à "la Liste<int>".

Je n'aime pas utiliser "var" quand je dois aller à une certaine définition de la méthode pour trouver ce type de variable "var" représente ou par avoir à compter sur visual studio intelli-pop-up ou tout ce que l'on appelle, par exemple, ce n'est pas ok pour moi:

var someVaraible = SomeMethod();

Je veux dire, qu'est-ce que le "SomeMethod" fonction supposée retourner? Pouvez-vous dire tout simplement en regardant la ligne de code? Non, vous ne pouvez pas, donc c'est pourquoi je ne peux pas utiliser "var" sur ces situations.

40voto

Razzie Points 14705

Il y a beaucoup de discussion sur ce sujet, mais je pense que tout se résume à votre goût, tout comme l'utilisation de la 'ce' mot-clé presque partout.

J'ai personnellement préfèrent explicitement les variables de type, mais lors de l'utilisation de génériques imbriqués les collections les choses peuvent devenir plus lisibles à l'aide d'un tapée implicitement variable. Regardez:

Dictionary<string, Dictionary<string, string>> myDictionary = new Dictionary<string, Dictionary<string, string>>();

vs:

var myDictionary = new Dictionary<string, Dictionary<string, string>>();

EDIT: cette SORTE rubrique traite le même sujet, avec quelques belles réponses: http://stackoverflow.com/questions/236878/what-to-use-var-or-object-name-type

17voto

uli78 Points 410

Juste au cas où certains ne l'avez pas encore remarqué, vous pouvez facilement changer les "suggestions" de Redimensionnement (Redimensionnement -> Options -> Langues -> Actions -> "Remplacer explicite spécification du type avec ‘var'").

Personnellement, je préfère avoir de type explicite spécifications partout, mais je ne suis pas trop pointilleux à ce sujet.

6voto

Daniel Henry Points 332

C'est juste plus facile à taper le var pseudo-mot-clé à la fois qu'un énorme nom de type, en particulier si un générique pourrait être impliquée. Toutefois, vous devez savoir qu'ils sont fonctionnellement identiques. Il n'y a pas de différence de performances ou quoi que ce soit de toute façon. Le compilateur tire le type de la partie droite de l'affectation et remplace var avec ce type. Il ne se passe pas au moment de l'exécution comme un VB variante.

6voto

Dustin Campbell Points 6323

FWIW, le mot-clé var est clairement lisible dans de nombreux cas. Surtout si...

  1. La partie droite de l'affectation est un constructeur d'expression.

    var map = new Dictionary>();

  2. Les variables locales ont des noms.

HTH

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