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

Affichage des résultats du sondage: Êtes-vous pour ou contre cette proposition ?

Votants
297. Vous ne pouvez pas participer à ce sondage.
  • Pour la proposition 1

    103 34,68%
  • Pour la proposition 2

    22 7,41%
  • Contre

    172 57,91%
Langage Java Discussion :

JDK 7: Proposition 11 : Typedef [Débat]


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Par défaut JDK 7: Proposition 11 : Typedef
    Typedef, c'est permettre de créer une espèce d'alias ou de raccourcis.
    Par exemple :

    Proposition 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import java.util.Map<String,String> as MyProperties;
    import java.util.Map<String,T> as Lookup<T>;
    // if we add BGGA function types[
    import { double => double } as DoubleFcn;
    Proposition 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    static class MyProperties = Map<String,String>;
    static class Lookup<T> = Map<String,T>;
    // if we add BGGA function types
    static class DoubleFcn = { double => double };

  2. #2
    Membre confirmé
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Généralement on ne fait pas vraiment attention aux imports, les EDI permettent même de les masquer automatiquement, la proposition 1 risque donc d'apporter une certaine confusion à la lecture du code.

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Je suis plutôt pour la proposition 1, et cela permettrait de résoudre plus facilement des conflits de nom de classes.

    Actuellement on est obligé d'utiliser le nom complet pour une des classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import java.util.Date;
     
    ...
    Date date = new Date(); // java.util.Date
    java.sql.Date sqlDate = new java.sql.Date(0L); // java.sql.Date

    On pourrait donc faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import java.util.Date;
    import java.sql.Date as SqlDate;
     
    ...
    Date date = new Date(); // java.util.Date
    SqlDate sqlDate = new SqlDate(0L); // java.sql.Date
    a++

  4. #4
    Membre expérimenté
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Par défaut
    Comme osopardo, je me suis d'abord fait la réflexion que la prop 1 risque de ne pas être visible. Mais ceci dit, la prop 2 est un peu alambiquée et compliquée.

    Ce qui est sûr, c'est que comme dit adiGuba, ce serait vraiment pratique. Ça fait partie des choses qui me manquent terriblement par rapport au Python, qui utilise la syntaxe de la première prop.

    J'ai donc voté pour la 1, en me disant que les IDE pouvaient ensuite s'adapter pour rendre la chose visible Car c'est à l'IDE de s'adapter au langage, et non l'inverse !

    EDIT : Argghhh, beaucoup de contre

  5. #5
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    pouah quel horreur

    si des "collisions" sur les noms arrivent, il faut changer le nom de la ou des classes. cela evite que l'on nomme de la même façon 2 classes qui ont une couverture technique/fonctionnnelle différente.

    Déjà que trouver un nom de classe clair n'est pas simple mais en plus si on permet ça, la maintenance vas être sympa dans les années a venir...

  6. #6
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    J'ai voté contré parce que ça va clairement complexifier le code. Pour peu qu'une personne dans l'équipe définisse ses propres alias, ça va finir par être dur à lire le code.
    Pour peu que l'on ait un vicieux, on va se retrouver avec des trucs complètement improbables, comme par exemple "échanger" le nom de 2 classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import mypackage.ClassA as ClassB;
    import mypackage.ClassB as ClassA;

    Je vois toutefois 2 avantages à cette proposition :
    1. Comme l'a dit adiGuba, c'est vraiment bien dans le cas où l'on importe 2 classes de même nom mais de packages différents.
    2. Ca pourrait être utilisé (détourné ?) pour améliorer l'obfuscation de code

    Maintenant, si ça devait être implémenté, je préfèrerais la syntaxe 1 (ça fait un peu SQL, mais bon).
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  7. #7
    Membre expérimenté
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Par défaut
    Citation Envoyé par austin P. Voir le message
    si des "collisions" sur les noms arrivent, il faut changer le nom de la ou des classes. cela evite que l'on nomme de la même façon 2 classes qui ont une couverture technique/fonctionnnelle différente.

    Déjà que trouver un nom de classe clair n'est pas simple mais en plus si on permet ça, la maintenance vas être sympa dans les années a venir...
    Ça reste qu'une possibilité. Donc si tu ne veux pas chercher de noms différents, tu fais à l'ancienne avec le chemin complet.

  8. #8
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Je suis plutôt pour la proposition 1, et cela permettrait de résoudre plus facilement des conflits de nom de classes.

    Actuellement on est obligé d'utiliser le nom complet pour une des classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import java.util.Date;
     
    ...
    Date date = new Date(); // java.util.Date
    java.sql.Date sqlDate = new java.sql.Date(0L); // java.sql.Date

    On pourrait donc faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import java.util.Date;
    import java.sql.Date as SqlDate;
     
    ...
    Date date = new Date(); // java.util.Date
    SqlDate sqlDate = new SqlDate(0L); // java.sql.Date
    a++
    Je me réveil peut etre un peut tard mais bon me voila.

    Je penses que l'exemple d'adiGuba est le seul valable dans tout ce que j'ai vue (Et peut etre aussi si tu as un NomDeClasseALaConARalonge dont tu ne veux pas que ca te pourrisse ton code)

    Cependant, contraitement a ce qu'a dit adiGuba, je trouve que tu peux faire la même chose avec les deux syntaxes

    On pourrait également faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import java.util.Date;
    static class SqlDate = java.sql.Date;
    ...
    Date date = new Date(); // java.util.Date
    SqlDate sqlDate = new SqlDate(0L); // java.sql.Date
    La première solution est peut être plus simple à comprendre, plus condensé, et plus dans la logique des imports

  9. #9
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Je me dis que si ça passe dans Java7, il serait intéressant que les IDE mette en évidence le fait qu'une classe a un alias.
    Par exemple, en proposant de mettre une couleur particulière genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import java.util.Date;
    import java.util.Date as Date2;
    
    ...
    public void aMethod() {
        Date date = ...;
        Date2 date = ...;
    }
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  10. #10
    Membre chevronné
    Avatar de bmoussaud
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 218
    Par défaut
    C''est la porte ouverte aux vieux demons du langage C:
    import java.util.Map<String,String> as MyProperties;
    Non ! Java est un langage Objet et il doit le rester !
    Si c'est pour économiser 3 frappes de touches, les IDE modernes sont maintenant bien présent

  11. #11
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Pour paraphraser une signature, je dirai : "un code crade en C++ est humain, mais une véritable catastrophe nécessite un typedef". Encore que les pires horreurs combinent typedef, pointeurs et const, et on en est à l'abri en java, mais non. C'est la porte ouverte à toutes les fenêtres, et les grueeks (mi geek mi cochon) vont s'y ruer joyeusement.

    Bon c'est vrai que les arguments d'adiguba tiennent la route, mais j'ai encore de trop mauvais souvenirs.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  12. #12
    Membre éclairé Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Par défaut
    Je suis pour !
    Et celà pour les mêmes raisons qu'a emis adiGuba dans le spremières pages !

  13. #13
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    J'aimerais bien truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MyChildList as ArrayList implements ChildList;
    MyChildList myChildList=new MyChildList(){
       //implementation des fonctions de l'interface
    }
    Car pour l'instant je doit créer un package contenant les classes implémentant ChildList. Et je commence à avoir beaucoup de fichiers - ou alors ya une instruction Java que j'ai zappé.
    MyChildList n'est pas une classe public à proprement parlé, mais pas vraiment privée non plus. il faudrait réécrire 'MyChildList as ArrayList implements ChildList;' chaque fois qu'on en a besoin, ou 'MyChildList as AbstracList<Eleve> implements ChildList;', tout polymorphisme, generics et autres trucs objets étant possibles.

  14. #14
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Par défaut A faveur pour la proposition 1
    Je suis plutot a faveur pour la proposition 1 surtout lorsque il faut utiliser desux classes qui ont le meme nom.
    Par exemple la classe Date.

Discussions similaires

  1. Réponses: 165
    Dernier message: 03/09/2009, 15h35
  2. Réponses: 78
    Dernier message: 27/08/2009, 19h29
  3. JDK 7: Proposition 5 : extensions de méthodes
    Par vbrabant dans le forum Langage
    Réponses: 75
    Dernier message: 19/10/2008, 13h32
  4. JDK 7: Proposition 3 : Comparer les énumérations
    Par vbrabant dans le forum Langage
    Réponses: 52
    Dernier message: 19/10/2008, 12h36
  5. Réponses: 27
    Dernier message: 19/10/2008, 11h51

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