Précédent   Forum du club des développeurs et IT Pro > Java > Communauté Java > Débats

Débats Les débats et sondages sur le langage et les technologies Java

Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Affichage des résultats du sondage: Êtes-vous pour ou contre cette proposition ?
Pour 61 21,94%
Contre 217 78,06%
Votants: 278. Vous ne pouvez pas participer à ce sondage.

Publicité
'
Réponse
 
Outils de la discussion
Vieux 16/12/2007, 20h40   #1
vbrabant
Expert Confirmé Sénior
 
Inscription : mai 2003
Messages : 3 293
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 3 293
Points : 7 670
Points : 7 670
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.
vbrabant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 23h31   #2
JPDMJC
Membre éclairé
 
Avatar de JPDMJC
 
Inscription : 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
Envoyer un message via MSN à JPDMJC
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.
JPDMJC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 01h44   #3
yann2
Membre Expert
 
Avatar de yann2
 
Homme
Ingénieur développement logiciels
Inscription : mai 2004
Messages : 792
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : mai 2004
Messages : 792
Points : 1 243
Points : 1 243
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
__________________
duck and cover
yann2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 09h16   #4
Napalm51
Membre confirmé
 
Inscription : septembre 2007
Messages : 282
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 282
Points : 282
Points : 282
Contre pour la complexité de lecture/compréhension qui deviendrait plus difficile.
Napalm51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 10h18   #5
austin P.
Membre habitué
 
Avatar de austin P.
 
Inscription : juin 2004
Messages : 175
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : juin 2004
Messages : 175
Points : 142
Points : 142
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")
austin P. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 10h22   #6
lunatix
Rédacteur/Modérateur
 
Avatar de lunatix
 
Homme julien
Architecte technique
Inscription : novembre 2002
Messages : 1 908
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 908
Points : 3 318
Points : 3 318
Envoyer un message via ICQ à lunatix Envoyer un message via AIM à lunatix Envoyer un message via MSN à lunatix
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.
__________________
Blog blog = new MyBlog();
lunatix est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 10h43   #7
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 655
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

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

Informations forums :
Inscription : avril 2002
Messages : 12 655
Points : 22 429
Points : 22 429
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++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 11h02   #8
OButterlin
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 087
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 087
Points : 5 821
Points : 5 821
Perso, j'ai pas compris, si quelqu'un avait la bonté de m'expliquer...
(on se sent nul parfois )
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 11h04   #9
bobuse
Membre confirmé
 
Avatar de bobuse
 
Inscription : janvier 2005
Messages : 229
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 229
Points : 217
Points : 217
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.
bobuse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 11h06   #10
romaintaz
Rédacteur/Modérateur
 
Avatar de romaintaz
 
Homme Romain Linsolas
Java craftsman
Inscription : juillet 2005
Messages : 3 579
Détails du profil
Informations personnelles :
Nom : Homme Romain Linsolas
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Java craftsman
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 3 579
Points : 6 722
Points : 6 722
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
romaintaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 11h31   #11
bassim
Membre expérimenté
 
Avatar de bassim
 
Homme
Ingénieur Réseaux
Inscription : 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
Envoyer un message via MSN à bassim Envoyer un message via Yahoo à bassim
c'est la confusion,
on pourrait croire que sort() appartiendrait à l'interface List

mais j'attends d'autres avis pour voter
__________________
Club des développeurs algériens

Where is my mind
bassim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 11h31   #12
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 655
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

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

Informations forums :
Inscription : avril 2002
Messages : 12 655
Points : 22 429
Points : 22 429
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++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 11h42   #13
lunatix
Rédacteur/Modérateur
 
Avatar de lunatix
 
Homme julien
Architecte technique
Inscription : novembre 2002
Messages : 1 908
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 908
Points : 3 318
Points : 3 318
Envoyer un message via ICQ à lunatix Envoyer un message via AIM à lunatix Envoyer un message via MSN à lunatix
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
__________________
Blog blog = new MyBlog();
lunatix est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 11h42   #14
romaintaz
Rédacteur/Modérateur
 
Avatar de romaintaz
 
Homme Romain Linsolas
Java craftsman
Inscription : juillet 2005
Messages : 3 579
Détails du profil
Informations personnelles :
Nom : Homme Romain Linsolas
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Java craftsman
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 3 579
Points : 6 722
Points : 6 722
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
romaintaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 11h50   #15
bobuse
Membre confirmé
 
Avatar de bobuse
 
Inscription : janvier 2005
Messages : 229
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 229
Points : 217
Points : 217
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)
bobuse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 11h52   #16
bobuse
Membre confirmé
 
Avatar de bobuse
 
Inscription : janvier 2005
Messages : 229
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 229
Points : 217
Points : 217
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.
bobuse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 11h57   #17
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 655
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

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

Informations forums :
Inscription : avril 2002
Messages : 12 655
Points : 22 429
Points : 22 429
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++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 12h08   #18
OButterlin
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 087
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 087
Points : 5 821
Points : 5 821
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...
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 12h12   #19
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 655
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

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

Informations forums :
Inscription : avril 2002
Messages : 12 655
Points : 22 429
Points : 22 429
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++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 13h29   #20
bulbo
Rédacteur
 
Avatar de bulbo
 
Homme
Consultant informatique
Inscription : février 2004
Messages : 1 180
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : février 2004
Messages : 1 180
Points : 1 856
Points : 1 856
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.
!! J'aurais voulu être une conserve !!
bulbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h46.


 
 
 
 
Partenaires

Hébergement Web