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

Framework .NET Discussion :

[Article] Présentation de la classe Tuple du .NET Framework 4


Sujet :

Framework .NET

  1. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par oyigit Voir le message
    Lorsqu'on manipule un objet de type ParametresRechercheClients, on sait (et visual studio nous le montre bien) qu'on traite des paramètres de recherche de patients, on sait à quoi est destiné l'objet..., alors qu'avec un type anonyme...
    Mais justement le type anonyme est à utiliser quand le nom du type n'a pas d'importance... car autrement la construction d'une classe ordinaire est fait pour ça !

    D'ailleurs c'était tout l'intérêt de la création générique du Tuple : Il évite aux développeurs d'écrire chacun de leur coté leur propre Tuple qui vont rentrer en conflit lors de la mise en commun d'un projet. Et oui ils l'appelles tous "Tuple" car le nom du type n'a pas d'important mais seulement ses propriétés.

    Par exemple dans le cas où une méthode doit avoir en sortie plusieurs variables.
    Au lieu d'avoir 3 ou 4 "out" l'idéal est de sortir tout ça par le "return" dans un classe dont le nom n'a aucune importance.

  2. #22
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par Jérôme Lambert Voir le message
    Je pense que ça devrait être possible de pouvoir utiliser un var "type" de retour d'une méthode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var MaVarMethode()
    {
       return new {PropString = "hello", PropInt = 2010};
    }
    A la compilation, mon type anonyme donnera une classe concrète, c'est le principe des objets anonymes.
    Ce n'est pas possible car le compilateur ne pas faire une déduction a partir du corps de la méthode ... le seul moyen de savoir ce qu'il se passe c'est de l executer ...

    Comment tu veux que le compilateur fasse dans ce cas la sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var MaVarMethode(bool test)
    {
       if(test)
          return new {PropString = "hello", PropInt = 2010};
       else
          return new {PropBool = true, PropInt2 = 2010};
    }
    A quoi va ressembler ton type en sortie ?

  3. #23
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Ce n'est pas possible car le compilateur ne pas faire une déduction a partir du corps de la méthode ... le seul moyen de savoir ce qu'il se passe c'est de l executer ...
    Ca tombe bien car ce n'est pas du tout ce que j'ai écrit !

    Le type est parfaitement déclaré par la forme "( Type1 Name1, Type2 Name2, etc... )"

    Le mot clé "var" n'est pas utilisé. Le mot clé "var" garde toujours son utilisation en local.

    Par exemple le type "KeyValuePair<int, string>" pourrait être remplacé par "(int Key, string Value)"

    Edit : excuse j'ai cru que tu répondais à mon dernier message

  4. #24
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par ijk-ref Voir le message
    Ca tombe bien car ce n'est pas du tout ce que j'ai écrit !
    Ca tombe bien ce n'etait pas a vous que je répondais

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Et comment trouvez-vous ma proposition ?

    Si elle fait un peu trop "Jean-Claude Van Damme donne des cours de physique-moléculaire" faut le dire !

  6. #26
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Jérôme Lambert Voir le message
    (thomas, c'est toi ?!!! => private joke avec l'équipe dvp )
    Non c'était pas moi... mais quelqu'un de tout aussi sensé

    Citation Envoyé par Jérôme Lambert Voir le message
    Après, pourquoi n'est-il pas possible d'utiliser ce type d'écriture ? Il n'y que les équipes de Microsoft qui ont la réponse suite à leurs très nombreuses deiscussions brainstorming, design, etc.
    Pour ce genre de question, je recommande vivement la lecture du blog d'Eric Lippert.
    Mais bon, la raison pour laquelle telle ou telle fonctionnalité n'est pas implémentée est presque toujours la même : ça coute trop cher en temps et en ressources par rapport aux avantages que ça apporte. La moindre petite fonctionnalité de rien du tout demande des spécifications, du développement, des tests très poussés, de la documentation, etc... donc il faut que ça en vaille vraiment la peine, ils implémentent pas tous les petits gadgets qui leur passent par la tête.

    Citation Envoyé par ijk-ref Voir le message
    Et comment trouvez-vous ma proposition ?
    Moi j'aime bien... tu peux toujours suggérer ça à Microsoft, mais je doute qu'ils l'intègrent. Ou alors peut-être dans C# 10

  7. #27
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Moi j'aime bien... tu peux toujours suggérer ça à Microsoft, mais je doute qu'ils l'intègrent. Ou alors peut-être dans C# 10
    Je ne pense pas qu'ils résisteront aussi longtemps pour ne pas l'utiliser.

    Je pense qu'il suffit de vérifie qu'il n'y ait pas de conflit dans la grammaire... ensuite tout est déjà implanté grâce au "var"

    Où puis-je réaliser cette proposition. Il y a forum, un sujet de discussion approprié pour ma question ?

  8. #28
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par ijk-ref Voir le message
    Où puis-je réaliser cette proposition. Il y a forum, un sujet de discussion approprié pour ma question ?
    https://connect.microsoft.com/
    Mais ne te fais pas trop d'illusions

  9. #29
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par tomlev Voir le message
    https://connect.microsoft.com/
    Mais ne te fais pas trop d'illusions
    Pourquoi donc ! "Windows 7 c'est moi !"

  10. #30
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Ce n'est pas possible car le compilateur ne pas faire une déduction a partir du corps de la méthode ... le seul moyen de savoir ce qu'il se passe c'est de l executer ...

    Comment tu veux que le compilateur fasse dans ce cas la sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var MaVarMethode(bool test)
    {
       if(test)
          return new {PropString = "hello", PropInt = 2010};
       else
          return new {PropBool = true, PropInt2 = 2010};
    }
    A quoi va ressembler ton type en sortie ?
    J'ai pas dit que c'était possible sans changement au préalable du compilateur. (et j'ai pas dit non plus que ce que j'ai proposé est une fonctionnalité que je voudrais voir intégrée dans C#, qu'on se comprenne bien ).

    Par contre, quand tu dis que le compilateur ne peut pas déduire le type de retour sur base du corps de la méthode : tu es bien sûr ?!

    Comment ça se fait que ceci ne compile pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int MaMethode()
    {
       return "";
    }
    Ou si je réprends ton exemple, comment ça se fait que ceci ne compile pas non plus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int MaVarMethode(bool test)
    {
       if(test)
          return 1;
       else
          return "";
    }
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  11. #31
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par Jérôme Lambert Voir le message
    Par contre, quand tu dis que le compilateur ne peut pas déduire le type de retour sur base du corps de la méthode : tu es bien sûr ?!

    Comment ça se fait que ceci ne compile pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int MaMethode()
    {
       return "";
    }
    Ou si je réprends ton exemple, comment ça se fait que ceci ne compile pas non plus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int MaVarMethode(bool test)
    {
       if(test)
          return 1;
       else
          return "";
    }
    Justement il a déduit le type de retour a partir de la définition, puis une fois ce type déduis il vérifie que tous les return correspondent bien au type défini

  12. #32
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Justement il a déduit le type de retour a partir de la définition, puis une fois ce type déduis il vérifie que tous les return correspondent bien au type défini
    Le compilateur est donc bien capable de repérer les différents return dans le corps d'une méthode/propriété et en déduire les types renvoyés. On est d'accord
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  13. #33
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par Jérôme Lambert Voir le message
    Le compilateur est donc bien capable de repérer les différents return dans le corps d'une méthode/propriété et en déduire les types renvoyés. On est d'accord
    Mais heureusement il ne le fait pas... même pas pour les "var" en local... car ce serait un bazar monstre !

    C'est pourquoi il faut définir la typage avec cette écriture "(Type1, Name1, Type2 Name2, ...)" qui éviterait l'écriture de classes utilisées seulement pour la lecture de leurs propriétés.

  14. #34
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par Jérôme Lambert Voir le message
    Le compilateur est donc bien capable de repérer les différents return dans le corps d'une méthode/propriété et en déduire les types renvoyés. On est d'accord
    Les types des objets renvoyés par les "return" sont vérifiés par rapport au type spécifié dans la définition mais on ne peut pas faire le mouvement inverse car le nombre de return peut être multiple et de types différents tu ne peux donc pas déduire LE type renvoyé vu qu'il peut y en avoir PLUSIEURS

    Imaginons qu'il regarde dans les types qui sont dans les return pour déduire le type à renvoyer et qu'il renvoi le type le plus "général" (si tu as un classe A et une classe B qui hérite toutes les 2 de C, le type déduis de return new A(); et return new B(); serai donc C)

    Je vais te donner un exemple correct (car je suis d'accord que mon ancien exemple qui retournait un int et une string c'est incorrect syntaxiquement) mais où le type est impossible à déduire :

    Soit 2 classes A et B et 2 interface IC et ID:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class A : IC, ID {}
    class B : IC, ID {}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public var Method(bool aOrB)
    {
       if(aOrB)
          return new A();
       else
          return new B();
    }
    Alors quel type de retour va être déduis ici ? IC ou ID ? Le compilateur est complètement incapable de le deviner ... On ne peux donc pas déduire le type de retour avec les "return"

  15. #35
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Déjà, on parle de choses qui seraient possibles uniquement avec modification du compilateur (pour rappel).

    Si une telle évolution était possible, le compilateur devrait signaler une erreur à la compilation dans le cas où des des return renvoient des types différents. Ca me parait simple comme règle.

    Après, par rapport à ton nouvel exemple. Il est clair pour moi que les types que tu tentes de renvoyer sont différents.

    Si tu désirerais "typer le var" en IC par exemple, suffit d'utiliser le casting comme on le fait depuis toujours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public var Method(bool aOrB)
    {
       if(aOrB)
          return (IC)new A();
       else
          return (IC)new B();
    }
    A aucun moment, tu tentes de renvoyer un IC dans ton exemple, le compilateur n'a aucune raison de tenter une résolution de conflit.

    Et si on suit toujours ton raisonnement, pourquoi le code suivant compile et s'exécute correctement avec le framework 3.5 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var monObjetAnonyme = new { InstanceA = new A(), InstanceB = new B(), InstanceAIC = (IC)new A() };
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  16. #36
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par Jérôme Lambert Voir le message
    Déjà, on parle de choses qui seraient possibles uniquement avec modification du compilateur (pour rappel).

    Si une telle évolution était possible, le compilateur devrait signaler une erreur à la compilation dans le cas où des des return renvoient des types différents. Ca me parait simple comme règle.

    Après, par rapport à ton nouvel exemple. Il est clair pour moi que les types que tu tentes de renvoyer sont différents.

    Si tu désirerais "typer le var" en IC par exemple, suffit d'utiliser le casting comme on le fait depuis toujours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public var Method(bool aOrB)
    {
       if(aOrB)
          return (IC)new A();
       else
          return (IC)new B();
    }
    A aucun moment, tu tentes de renvoyer un IC dans ton exemple, le compilateur n'a aucune raison de tenter une résolution de conflit.

    Et si on suit toujours ton raisonnement, pourquoi le code suivant compile et s'exécute correctement avec le framework 3.5 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var monObjetAnonyme = new { InstanceA = new A(), InstanceB = new B(), InstanceAIC = (IC)new A() };
    et je ne vois pas bien pourquoi ton code ne devrait pas compiler, ce sont 3 variable différente d'un type anonyme qui peuvent donc avoir 3 type différent pas comme un retour de fonction qui ne peux avoir qu'un seul type...

    Forcer l'utilisation de cast pour toujours préciser le type de retour c'est un gros retour en arriere je vois plus bien l'interet de se casser la tete a mettre var comme type de retour si c pour se casser la tete a spécifier le type sur chaque return

  17. #37
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par anthyme Voir le message
    et je ne vois pas bien pourquoi ton code ne devrait pas compiler, ce sont 3 variable différente d'un type anonyme qui peuvent donc avoir 3 type différent pas comme un retour de fonction qui ne peux avoir qu'un seul type...

    Forcer l'utilisation de cast pour toujours préciser le type de retour c'est un gros retour en arriere je vois plus bien l'interet de se casser la tete a mettre var comme type de retour si c pour se casser la tete a spécifier le type sur chaque return
    Voila ton problème : tu n'as pas du tout compris comment fonctionne "var"

    "var" n'est pas un typage dynamique !

    Tout est résolu à la compilation. Autrement il ne sera pas possible après un "var" de connaitre les propriétés d'un objet

  18. #38
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Je n'ai jamais dit que c'était dynamique ...

    Var est censé être une aide à l'écriture par déduction de type à la compilation, quand on sort un mot clef qui est sensé simplifié la vie il faut que ce soit carré
    Perso je vois plus de perte que de gain de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public var Method(bool aOrB)
    {
       if(aOrB)
          return (IC)new A();
       else
          return (IC)new B();
    }
    par rapport a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public IC Method(bool aOrB)
    {
       if(aOrB)
          return new A();
       else
          return new B();
    }
    Le deuxieme est quand même plus explicite, plus concis et plus propre ...

  19. #39
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 467
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Perso je vois plus de perte que de gain de (...) par rapport a (...)
    Le deuxieme est quand même plus explicite, plus concis et plus propre...
    Tout à fait mais ce n'est ce qu'il a voulu dire

    C'était juste un exemple où "var" pourrait fonctionner.

    ... et puis c'est de votre faute aussi ! Je vous ai dit de ne pas partir dans le "délire" sur l'utilisation de "var" sur des fonctions. Ce débat ne mènera à rien !

    Le seul, le grand et unique débat possible c'est sur le choix d'une classe/structure permettant de remplacer "Tuple" !

    Et entre :
    - KeyValuePair<int, string>
    - Tuple<int, string>
    - (int Key, string Value)

    c'est tout vu pour moi

  20. #40
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par ijk-ref Voir le message
    Tout à fait mais ce n'est ce qu'il a voulu dire

    C'était juste un exemple où "var" pourrait fonctionner.

    ... et puis c'est de votre faute aussi ! Je vous ai dit de ne pas partir dans le "délire" sur l'utilisation de "var" sur des fonctions. Ce débat ne mènera à rien !

    Le seul, le grand et unique débat possible c'est sur le choix d'une classe/structure permettant de remplacer "Tuple" !

    Et entre :
    - KeyValuePair<int, string>
    - Tuple<int, string>
    - (int Key, string Value)

    c'est tout vu pour moi
    Moi j'aime bien votre idée sauf pour le return.

    je verrai bien un return dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    return new (1,"toto");
    // ou 
    return (1,"toto");
    plutot que de retourner un type anonyme...

    L'avantage du tuple c qu'on peut renvoyer une liste de tuple dans le type de retour

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