Publicité

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

Votants
278. Vous ne pouvez pas participer à ce sondage.
  • Pour

    61 21,94%
  • Contre

    217 78,06%
+ Répondre à la discussion
Page 1 sur 4 1234 DernièreDernière
Affichage des résultats 1 à 20 sur 76
  1. #1
    Expert Confirmé Sénior

    Inscrit en
    mai 2003
    Messages
    3 289
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 3 289
    Points : 9 726
    Points
    9 726

    Par défaut JDK 7: Proposition 5 : extensions de méthodes

    Aujourd'hui :

    Code :
    1
    2
    3
    4
    5
     
    import java.util.Collections;
     
    List<String> list = …;
    Collections.sort(list);
    Demain :

    Code :
    1
    2
    3
    4
    5
    import static java.util.Collections.sort;
    
    List<String> list = …;
    list.sort();
    En combinant cette proposition avec la proposition 6, il serait possible d'écrire du code de ce style :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import static java.util.Collections.sort;
     
    List<String> strings = ...;
     
    strings
        .filter(isCountryName) // could be a closure
        .sort()
        .uniq()
        .each(printString); // ditto
    Vincent Brabant

    Ne pas me contacter par MP ni par mail pour des questions techniques. Ma liste d'amis restera vide.

  2. #2
    Membre éclairé Avatar de JPDMJC
    Inscrit en
    février 2005
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations forums :
    Inscription : février 2005
    Messages : 337
    Points : 346
    Points
    346

    Par défaut

    J'avouerai être plutôt pour, histoire de raccourcir encore plus le code, mais cela ne risque t-il pas de mettre en déroute celui qui lit le code ?
    Java est sensé être un langage simple - enfin je crois, et permettre de telles choses pourrait aider à s'emmêler royalement les pinceaux.

    Ou pas.

  3. #3
    Membre Expert Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2004
    Messages : 805
    Points : 1 326
    Points
    1 326

    Par défaut

    Bonsoir

    Je suis contre, avec ce genre de code on ne sait plus ce qui est static et ce qui est objet. Je préfère plutôt l'ajout d'une méthode sort dans l'interface List par exemple.

    A part ça, l'import static ça existe déjà et ça peut être pratique si on en abuse pas (perso je ne l'utilise jamais, ça va tellement vite, et c'est tellement plus parlant, d'écrire Collections.sort() ; il y a de meilleurs perfs quand on utilise l'import static ?).

    yann

  4. #4
    Membre confirmé
    Inscrit en
    septembre 2007
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 282
    Points : 282
    Points
    282

    Par défaut

    Contre pour la complexité de lecture/compréhension qui deviendrait plus difficile.

  5. #5
    Membre actif Avatar de austin P.
    Inscrit en
    juin 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : juin 2004
    Messages : 181
    Points : 183
    Points
    183

    Par défaut

    plus que contre

    la lecture du code devient compliqué.
    on arrive presque aux problématiques d'héritages multiples (méthodes du même nom, etc..).

    tout ça pour gagner quelques lettres....

    Aucun interêt.
    En essayant continuellement on finit par réussir. Donc : plus ça rate, plus on a de chance que ça marche. (Jacques Rouxel : "Les shadoks")

  6. #6
    Rédacteur
    Avatar de lunatix
    Homme Profil pro julien
    Architecte technique
    Inscrit en
    novembre 2002
    Messages
    1 945
    Détails du profil
    Informations personnelles :
    Nom : Homme julien
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : novembre 2002
    Messages : 1 945
    Points : 3 396
    Points
    3 396

    Par défaut

    hum, pas facile. Autant effectivement, ca complique la lecture du code, ce qui tends a me faire voter non, mais ca permet d'un autre coté d'implementer des domain specific languages plus facilement.

    Je vote pour, en me disant que ca serait a utiliser parcimonieusement (comme le import static en fait), car ca peut permettre d'améliorer certaines api.

  7. #7
    Expert Confirmé Sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 022
    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 022
    Points : 20 798
    Points
    20 798

    Par défaut

    Je m'abstiens de voter !

    Cette proposition n'est pas forcément très clair et cela risque d'apporter des ambigüités... pourtant il serait intéressant d'avoir un moyen de faire évoluer les interfaces sans casser la compatibilité...

    Bref oui sur le principe mais pas comme cela (oui je sais je suis chiant )


    Citation Envoyé par yann2 Voir le message
    Je préfère plutôt l'ajout d'une méthode sort dans l'interface List par exemple.
    Malheureusement il est impossible de modifier une interface sans casser la compatibilité, car toutes les classes implémentant l'interface DEVRONT obligatoirement implémenter cette méthode...


    a++

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    5 432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 5 432
    Points : 6 332
    Points
    6 332

    Par défaut

    Perso, j'ai pas compris, si quelqu'un avait la bonté de m'expliquer...
    (on se sent nul parfois )

  9. #9
    Membre confirmé Avatar de bobuse
    Inscrit en
    janvier 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 229
    Points : 223
    Points
    223

    Par défaut

    Je comprends vaguement ce que veux dire lunatix, mais je rejoins les autres pour dire que c'est la porte ouverte à toutes les fenêtres !
    Comme le dit yann2, ce serait plus logique d'ajouter des méthodes déléguantes dans les conteneurs.

  10. #10
    Rédacteur/Modérateur
    Avatar de romaintaz
    Homme Profil pro Romain Linsolas
    Java craftsman
    Inscrit en
    juillet 2005
    Messages
    3 717
    Détails du profil
    Informations personnelles :
    Nom : Homme Romain Linsolas
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2005
    Messages : 3 717
    Points : 7 294
    Points
    7 294

    Par défaut

    J'ai voté contre, parce que je trouve que ça apporte trop d'ambiguïté, et ça n'améliore pas franchement la lisibilité du code !

    Citation Envoyé par adiGuba Voir le message
    Malheureusement il est impossible de modifier une interface sans casser la compatibilité, car toutes les classes implémentant l'interface DEVRONT obligatoirement implémenter cette méthode...
    Ou alors, il faudrait proposer une évolution du Java en proposant des méthodes optionelles dans les interfaces. Les classes implémentant cette interface ne seraient alors pas obligées de définir ces méthodes optionnelles, et dans ce cas, elles lanceraient une exception MethodNotImplementedException Comme ça, a pu problème de compatibilité
    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

  11. #11
    Membre expérimenté Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    février 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : février 2005
    Messages : 647
    Points : 592
    Points
    592

    Par défaut

    c'est la confusion,
    on pourrait croire que sort() appartiendrait à l'interface List

    mais j'attends d'autres avis pour voter

  12. #12
    Expert Confirmé Sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 022
    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 022
    Points : 20 798
    Points
    20 798

    Par défaut

    Citation Envoyé par OButterlin Voir le message
    Perso, j'ai pas compris, si quelqu'un avait la bonté de m'expliquer...
    En fait c'est tout simple. L'objectif étant de simplifier l'écriture de méthode.

    Actuellement pour "ajouter" une méthode dans une interface on utilise une méthode static qui utilise une instance en premier paramètre.

    Par exemple comme l'interface List ne possède pas de méthode sort(), on utilise la méthode static Collections.sort() :

    Code :
    Collections.sort(list);
    Cette proposition vise à faire comme si cette méthode appartenait à l'interface List, en utilisant l'écriture suivante :
    Mais en réalité cela reviendrait exactement au même que le premier code : bref ce n'est que du sucre syntaxique qui simplifie l'écriture de l'appel d'une méthode static...


    Citation Envoyé par romaintaz Voir le message
    Les classes implémentant cette interface ne seraient alors pas obligées de définir ces méthodes optionnelles, et dans ce cas, elles lanceraient une exception MethodNotImplementedException Comme ça, a pu problème de compatibilité
    Sauf que dans ce cas tu n'est plus sûr de pouvoir utiliser la méthode...
    Je préfère quand même utiliser une méthode static plutôt qu'avoir à gérer une exception...

    a++

  13. #13
    Rédacteur
    Avatar de lunatix
    Homme Profil pro julien
    Architecte technique
    Inscrit en
    novembre 2002
    Messages
    1 945
    Détails du profil
    Informations personnelles :
    Nom : Homme julien
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : novembre 2002
    Messages : 1 945
    Points : 3 396
    Points
    3 396

    Par défaut

    bon, en clair ajourd'hui :
    Code :
    import static java.util.Collection.sort
    permet d'ecrire dans son code
    pas forcement, tres judicieux, et pourtant, le import static bien utilisé est tres utile ! (je pense a l'api Math par exemple, ou certaines classes utilitaires)

    la proposition propose de pouvoir ecrire
    je pense que c'est rarement une bonne idée, mais cela permet quand même de bonnes choses, utilisé judicieusement.

    Code :
    list.synchronizedList().sort();
    serait quand meme beaucoup plus lisible que
    Code :
    sort( synchronizedList( list ) );
    De plus ca permetrait de faire plus facilment des api de type DSL (voir mon blog , l'api quaere
    et qui n'a jamais eu envie d'ajouter une bonne quinzaine de methodes a String (par exemple quand on fait du web, plutot que de tapper
    Code :
    1
    2
    3
    maString.escapeHTML() 
    plutot que 
    StringUtils.escapeHTML(maString)
    donc j'ai voté oui, parce que bien utilisé c'est tres puissant, et ca améliore la lisibilité du code. Mal utilisé... c'est horrible

  14. #14
    Rédacteur/Modérateur
    Avatar de romaintaz
    Homme Profil pro Romain Linsolas
    Java craftsman
    Inscrit en
    juillet 2005
    Messages
    3 717
    Détails du profil
    Informations personnelles :
    Nom : Homme Romain Linsolas
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2005
    Messages : 3 717
    Points : 7 294
    Points
    7 294

    Par défaut

    Citation Envoyé par adiGuba Voir le message
    Sauf que dans ce cas tu n'est plus sûr de pouvoir utiliser la méthode...
    Je préfère quand même utiliser une méthode static plutôt qu'avoir à gérer une exception...
    Bien entendu, c'était juste pour plaisanter

    Je reste contre cette proposition, je suis d'accord avec bassim.
    Et que se passe-t-il dans le cas où l'interface List proposerait alors une méthode sort ? Quelle méthode sort serait appelée alors ?
    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

  15. #15
    Membre confirmé Avatar de bobuse
    Inscrit en
    janvier 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 229
    Points : 223
    Points
    223

    Par défaut

    Citation Envoyé par adiGuba Voir le message
    Actuellement pour "ajouter" une méthode dans une interface on utilise une méthode static qui utilise une instance en premier paramètre.
    Tiens, j'avais jamais pensé à cette généralisation. Est-ce qu'il y a un design pattern connu qui explicite ça ? (avec un nom qui rocks)

  16. #16
    Membre confirmé Avatar de bobuse
    Inscrit en
    janvier 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 229
    Points : 223
    Points
    223

    Par défaut

    Citation Envoyé par adiGuba Voir le message
    Malheureusement il est impossible de modifier une interface sans casser la compatibilité, car toutes les classes implémentant l'interface DEVRONT obligatoirement implémenter cette méthode...
    Ben c'est pas la mort, non plus. Ça demande un peu de boulot, mais bon ça se fait.

    Mais d'un point de vue design, comme tu dis, ça ne serait peut-être pas super clean de déplacer ces méthodes.

  17. #17
    Expert Confirmé Sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 022
    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 022
    Points : 20 798
    Points
    20 798

    Par défaut

    Citation Envoyé par bobuse Voir le message
    Ben c'est pas la mort, non plus. Ça demande un peu de boulot, mais bon ça se fait.
    Je pense que tu dois parler de l'API standard...

    Mais une telle modification impacterait également un très grand nombre d'APIs externes et de programmes...

    Bref une perte de la compatibilité ascendante !

    a++

  18. #18
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    5 432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 5 432
    Points : 6 332
    Points
    6 332

    Par défaut

    Bon, merci adiGuba, j'ai compris l'intérêt, c'est déjà ça !
    Mais (je sais, j'suis un boulet ), on est bien d'accord que sort() ne fait pas partie de List, alors (même combiné à la proposition 6) comment on va faire comprendre à la méthode sort() qu'elle s'applique à l'objet qui l'appelle ?
    Ca consisterait à avoir une méthode genre "getCaller()" ?
    (ceci dit, ça me plairait bien le getCaller())

    Bref, il y a encore un truc qui m'échappe...

  19. #19
    Expert Confirmé Sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 022
    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 022
    Points : 20 798
    Points
    20 798

    Par défaut

    Citation Envoyé par OButterlin Voir le message
    Bref, il y a encore un truc qui m'échappe...
    C'est juste du sucre syntaxe :

    Grosso modo lorsque le compilateur voit ceci :
    Code :
    1
    2
    3
    import static java.util.Collections.sort
     
    list.sort();

    Il le remplace par ce code :
    Code :
    Collections.sort(list);
    Et c'est tout !


    Bref on continue à appeler une méthode static, mais on la présente comme une méthode d'instance

    a++

  20. #20
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2004
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : février 2004
    Messages : 1 255
    Points : 1 990
    Points
    1 990

    Par défaut

    Contre,

    Ce sucre syntaxique n'apporte rien au développeur moderne (ie assisté d'un IDE ) mais par contre rend la relecture et maintenance du code plus complexe.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •