2010-10-04 5 views
1

lequel est meilleur ou peut-être plus rapide pour déclarer une variable?Lequel est le meilleur? "var" ou "DataType"?

var ds = new Class1(); 

OU

Class1 ds = new Class1(); 

je me crois que le deuxième devrait être plus rapide compilateur coz n'a pas besoin de chercher le type Class1, mais certains addins comme ReSharper me Avisez toujours changer Class1-var .
Quelqu'un peut-il m'expliquer pourquoi?

+1

Remarque, ce n'est pas spécifique à 4,0. – jball

+0

oui oui ... désolé ... c'est de .Net3.5 –

+9

N'avons-nous pas été plus d'un million de fois? –

Répondre

9

Ils compilent à la même IL, donc ni l'un ni l'autre ne sera plus rapide. Cependant, il peut y avoir une grande différence de lisibilité.

Je tendance à favoriser déclarer explicitement le type de la variable, mais utilise var si l'un des cas suivants s'applique:

  • J'appelle un constructeur et le nom du type est longue (en particulier avec génériques)
  • J'utilise des types anonymes
  • le nom du type est raisonnablement long et l'expression d'initialisation est longue, mais toujours très claire à quel type il retournera
  • Je tiens à souligner l'objectif du code au lieu de la façon dont il atteint son résultat

Comme de nombreux problèmes de lisibilité, il y a une vaste gamme d'opinions sur l'endroit où utiliser var - de "nulle part" à "partout". Notez que vous pouvez modifier ce que ReSharper recommande pour vous dans les options.(Je crois me rappeler que par défaut, il «recommande» les deux sens, ce qui facilite le changement de position.)

Quelques réponses ont mentionné le nombre de touches utilisées. Je pense que c'est la pire raison possible de favoriser var. Je suis rarement, si jamais, goulot d'étranglement sur la vitesse de frappe. Ma vitesse de codage dépend beaucoup plus de ma compréhension du domaine du problème et de la clarté avec laquelle je peux imaginer la solution. Je préfèrerais de loin entrer 2000 touches, mais finir avec un design élégant qui est en fait représenté en 100 caractères que de taper seulement 500 touches pour un design moins lisible de 500 caractères. Pensez au temps passé en lisant le code plutôt que la mécanique de frappe.

+0

Dans le cas des expressions LINQ, j'utilise 'var' presque exclusivement. Pourquoi devrais-je prendre la peine de comprendre quel sera le type d'expression et pourquoi le lecteur devrait-il s'en préoccuper? – Gabe

+0

@Gabe: La plupart du temps, je suis entièrement d'accord. Juste de temps en temps, cela compte vraiment ... mais c'est définitivement l'exception plutôt que la règle. –

5

Ils compilent tous deux à la même chose. Lorsque vous utilisez var, vous laissez simplement le compilateur déduire le type lors de la compilation. Cela peut ajouter un peu de temps à la compilation (je n'ai pas réellement testé cette partie), mais n'aura aucun impact au moment de l'exécution.

L'avantage de l'ancien (qui est ce que je préfère) est quand vous commencez à traiter avec de longs noms de type:

var conn = new System.Data.SqlConnection(connString); 

beaucoup moins de touches et plus facile à lire que:

System.Data.SqlConnection conn = new System.data.SqlConnection(connString); 

En outre, sans var, en utilisant des types anonymes serait presque impossible:

var someObj = new { Name = "Test", Saying = "Hello World!" }; 

Il est certainement temps que je préfère utiliser le nom de type complet au lieu de var cependant. Le plus notable est lors de la gestion d'une valeur de retour d'une méthode. Si le nom de la méthode ne précise pas le type de valeur de retour, je le définirai explicitement. Cela réduit la confusion au cas où quelque chose change sur la route.

+0

Alors, pourquoi 'var' est-il recommandé? –

+3

@Dr TJ: C'est moins typer et il y a moins de chance que vous obteniez le type faux si vous changez la définition plus tard. –

+0

+10 pour 'changer la définition plus tard'. – BrunoLM

4

Il s'agit simplement d'une inférence de type au moment de la compilation, donc il n'y a pas de coût de performance. Le "gain de performance" est qu'il est plus rapide d'écrire var :)

1

Optez pour tout ce qui est plus lisible. Dans votre exemple, je pense que le premier exemple est plus lisible et a moins de duplication. Si vous n'avez pas le nom de classe sur la même ligne (parce que vous initialisez la variable au résultat d'un appel de méthode par exemple), j'utiliserais le style de déclaration de nom de type pour le rendre explicite à celui qui lit le code .

2

En règle générale, je serais favorable penché contre var quand ce n'est pas nécessaire (c'est avec des types anonymes) et le nom du type n'est pas horriblement compliqué (Dictionary<int, List<Class.InnerClass<HashSet<SomeOtherClass>>> ou autre). Chaque fois que j'entends parler de cette suggestion, ReSharper glisse un peu plus loin dans ma liste de choses à faire.

2

Il n'y a pas de différence de performance - le type de var est déterminé au moment de la compilation.

En ce qui concerne lequel est le meilleur, c'est une question de préférence. Personnellement, je préfère var si le code identifie clairement le type de var. Exemple:

 

// very much preferred 
var o = new System.blah.blah.Class1() 
 

Cependant, si vous avez trop penser sur le type, alors comme la définition de type:

 

    // I don't like this much because the return type isn't obvious 
    var result = AMethodThatReturnsSomeKindOfValue() 
 
Questions connexes