IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 .NET Discussion :

var maVariable ou int maVariable ? [C#]


Sujet :

.NET

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2010
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 92
    Points : 129
    Points
    129
    Par défaut var maVariable ou int maVariable ?
    Bonjour à tous,

    simple question, je me demande s'il y a un intérêt à remplacer :

    int maVariable = 6;
    par
    var maVariable = 6;

    J'utilise resharper et ce dernier me conseille de passer int à var car le typage est implicite.

    Il y a un gain en perf ? ou un intérêt quelconque ?

    Merci

  2. #2
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Au contraire, il faut laisser int, le typage explicite est à utiliser autant que possible. Cela évite à ton compilateur de se poser la question.

    Un petit lien MSDN
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2010
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 92
    Points : 129
    Points
    129
    Par défaut
    Merci beaucoup

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    La compilateur va utiliser le type le plus approprié à la compilation. Donc pas de problème de performance à utiliser var.
    Pour la lisibilité, j'ai tendance, comme Er3van à préférer le typage explicite.

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Au contraire, il faut laisser int, le typage explicite est à utiliser autant que possible. Cela évite à ton compilateur de se poser la question.

    Un petit lien MSDN
    et surtout au developpeur


    ps : Je suis surpris par la proposition de resharper, ca doit etre un cas spécifique (Foreach peut-etre?)
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Tout se joue à la compilation, un var sera remplacé par le type qui va bien, c'est l'inférence de type. L'executable généré ne differera pas et il n'y aura donc pas de problèmes de performances. Tout est dans le style de codage.
    Personellement, j'ai dorénavant une forte tendance à toujours utiliser le var car d'une part j'estime que le type de variable n'est pas forcément intéressant (si les variables sont correctement choisies, var listOfPerson est un List<Person> et non pas un int) et de plus ca permet un refactoring simple.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Person> people = Repository.GetPeople();
    Si sur GetPeople je décide dorénavant de retourner un IEnumerable<Person>, je dois tout changer mon code contrairement à ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var people = Repository.GetPeople();
    Après, quand on manipule des types anonymes on a plus trop le choix, c'est obligatoire.

  7. #7
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Ça se défend..
    Mais t'as le problème malgré tout.
    Si tu fais sur ton objet des opérations qui sont propre à son type, par exemple :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    people.Add(new Person("toto"));
    Avec var, tu n'auras plus l'erreur au niveau de la déclaration de ton objet mais uniquement au moment de l'appel à la méthode. Je ne trouve pas ça "mieux", mais effectivement, chacun son style de codage !

    Après, pour les types anonymes, en effet il n'y a guère le choix.
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Avec var, tu n'auras plus l'erreur au niveau de la déclaration de ton objet mais uniquement au moment de l'appel à la méthode. Je ne trouve pas ça "mieux", mais effectivement, chacun son style de codage !
    Non, puisque l'inference de type faite par la compilateur ne changera rien.
    "var" ça reste quand même du typage statique, inféré certes, mais statique; C# n'est pas JavaScript

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Non, puisque l'inference de type faite par la compilateur ne changera rien.
    "var" ça reste quand même du typage statique, inféré certes, mais statique; C# n'est pas JavaScript
    Je pense qu'il voulait dire au moment de la compilation mais sur la ligne de l'appel.
    Cela dit, si ca compile plus car la méthode n'existe pas dans le nouveau type, c'est que c'est le refactoring qui est foireux et d'avoir changé tous les List<T> en IEnumerable<T> n'aura pas forcément ammené une information pertinente (voire aura généré du "bruit" pour le gestionnaire de revisions des sources)

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Je pense qu'il voulait dire au moment de la compilation mais sur la ligne de l'appel.
    Après relecture, il s'avère que tu as sans doute raison. Mon message était donc sans objet (bon, ni le premier ni le dernier dans ce cas)

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  11. #11
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Je pense qu'il voulait dire au moment de la compilation mais sur la ligne de l'appel.
    C'était bien dans ce sens là !

    Citation Envoyé par Nathanael Marchand Voir le message
    et d'avoir changé tous les List<T> en IEnumerable<T> n'aura pas forcément ammené une information pertinente (voire aura généré du "bruit" pour le gestionnaire de revisions des sources)
    On est bien d'accord...

    => Donc ça se résume à une choix du développeur en terme de préférence personnel?
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  12. #12
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Donc ça se résume à une choix du développeur en terme de préférence personnel?
    Toutafé!

  13. #13
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Le "?" était en trop... y a des jours où mon clavier (c'est facile d'accuser le hardware hein?) n'est pas très en forme!
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/04/2007, 11h48
  2. Réponses: 2
    Dernier message: 10/04/2007, 12h39
  3. Erreur*: document.getElementById("mavariable") has no properties
    Par camyo dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 09/03/2007, 08h13
  4. delete [] mavariable impossible ?!...... le retour!
    Par Micromalice dans le forum C++
    Réponses: 12
    Dernier message: 07/11/2006, 14h07
  5. <form name=' $mavariable ' > ?
    Par eon-of-the-scorn dans le forum Langage
    Réponses: 3
    Dernier message: 27/07/2006, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo