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 334 86,75%
Contre 51 13,25%
Votants: 385. Vous ne pouvez pas participer à ce sondage.

Publicité
'
Réponse
 
Outils de la discussion
Vieux 20/12/2007, 10h08   #41
Uther
Expert Confirmé Sénior
 
Avatar de Uther
 
Homme
Inscription : avril 2002
Messages : 2 678
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 2 678
Points : 5 107
Points : 5 107
D'ailleurs je viens de faire gaffe que pour ma proposition de syntaxe, il serait même plus logique de faire la déclaration de l'exception en premier:
Code :
catch(Exception e : InstantiationException, IllegalAccessException)
Cela ressemblerait plus à ce qui est fait dans un foreach (ca fait trop longtemps que je suis obligé de bosser sur du 1.4, j'avais oublié l'ordre correct):
Code :
for (String str : listeDeStrings)
Uther est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 10h14   #42
bmoussaud
Membre expérimenté
 
Avatar de bmoussaud
 
Benoit Moussaud
Inscription : décembre 2003
Messages : 218
Détails du profil
Informations personnelles :
Nom : Benoit Moussaud
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2003
Messages : 218
Points : 548
Points : 548
Envoyer un message via Yahoo à bmoussaud Envoyer un message via Skype™ à bmoussaud
Pour. Effectivement la syntaxe est peut etre à revoir.
Mes souvenirs de C++ commence à être un peu flou,mais je crois me souvenir que le C++ utilise le séparateur ',' depuis le début ? non ?
__________________
Benoit Moussaud - XebiaLabs - Automatisation des déploiements. Screencast & Demo
bmoussaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 11h09   #43
ludosoft
Membre habitué
 
Avatar de ludosoft
 
Homme Ludovic Martin
Chef de projet technique
Inscription : juillet 2002
Messages : 95
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Martin
Âge : 32
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Chef de projet technique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juillet 2002
Messages : 95
Points : 116
Points : 116
Envoyer un message via MSN à ludosoft Envoyer un message via Skype™ à ludosoft
Pour, mais en changeant "|" pas une ",".
ludosoft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 11h43   #44
Traroth2
Expert Confirmé
 
Inscription : décembre 2003
Messages : 1 663
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 1 663
Points : 3 337
Points : 3 337
Pour. J'attends ça depuis longtemps.
__________________
Les brevets ? Le type qui a inventé l'eau chaude doit être grave blindé de thunes !
Traroth2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 12h24   #45
DrHelmut
Membre actif
 
Avatar de DrHelmut
 
Homme Hugo CAPOCCI
Développeur Java/J2EE - Intégrateur Filenet - expert ecm/bpm
Inscription : octobre 2005
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Hugo CAPOCCI
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur Java/J2EE - Intégrateur Filenet - expert ecm/bpm

Informations forums :
Inscription : octobre 2005
Messages : 100
Points : 169
Points : 169
Soit j'ai mal compris la proposition, soit je ne comprends pas l'utilité...

pour catcher plusieurs exceptions d'un coup, il y a l'héritage !
DrHelmut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h05   #46
cysboy
Membre habitué
 
Avatar de cysboy
 
Développeur informatique
Inscription : août 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2006
Messages : 221
Points : 134
Points : 134
Pour, c' est vrai que pour plusieurs exceptions catchées on veuille faire les même s traitements => diminution de code.
cysboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h20   #47
Uther
Expert Confirmé Sénior
 
Avatar de Uther
 
Homme
Inscription : avril 2002
Messages : 2 678
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 2 678
Points : 5 107
Points : 5 107
Citation:
pourquoi annoncer
catch(MonExcFille1,MonExcFille2 : MonExcMere)
et pas juste les exceptions filles? Je trouve que donner la classe mere ne sert pas à grand chose.
Citation:
Le compilateur / IDE prendrait automatiquement la classe commune dans la hiérarchie. Donc pas de cast nécessaire et recours aux méthodes "communes" dans le block catch. Ce qui peut donc expliquer l'absence de la définition de cette classe puisque le compilateur saura la déterminer.
Certes le compilateur pourrait prendre automatiquement la première classe mère commune aux exceptions, mais ça voudrait dire que la classe est définie implicitement. En plus du fait que je trouve ça moche, c'est contraire au pricipe Java qui a un typage explicite.

Nulle par en Java une variable n'existe sans que son type soit explicitement spécifié. Pas même dans le foreach (for(String str : listeDeString)) où ce serait tout à fait possible. Je ne pense pas qu'il faille changer ça surtout, pour une modification assez mineure.

Citation:
Soit j'ai mal compris la proposition, soit je ne comprends pas l'utilité...
pour catcher plusieurs exceptions d'un coup, il y a l'héritage !
L'héritage n'est pas toujours une bonne solution : cf ce post qui l'explique bien
Uther est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h34   #48
DrHelmut
Membre actif
 
Avatar de DrHelmut
 
Homme Hugo CAPOCCI
Développeur Java/J2EE - Intégrateur Filenet - expert ecm/bpm
Inscription : octobre 2005
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Hugo CAPOCCI
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur Java/J2EE - Intégrateur Filenet - expert ecm/bpm

Informations forums :
Inscription : octobre 2005
Messages : 100
Points : 169
Points : 169
J'avais pas pensé aux exceptions de type NullPointer, IO etc que l'on risque de rameuter avec un simple catch(Exception e)... mais là encore

Au final je dirais ni pour ni contre car ce serait un petit plus pour certains, certes, mais pour ceux qui passent par un IDE comme moi on s'en fout pas mal, à moins de tomber sur une méthode renvoyant pléthore d'exceptions (plus de 4-5, ce qui me parait extremement rare) et là à mon avis y'a un soucis dans la conception de la-dite méthode.

Pour les codeurs "à la mano", c'est un gain assez intéressant mais carrément gadget par rapport aux avancées de Java 5 (foreach/autoboxing/polymorphisme paramétrique => vrai gain en temps de codage ET en lisibilité)
DrHelmut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h49   #49
xavlours
Membre Expert
 
Avatar de xavlours
 
Inscription : février 2004
Messages : 1 833
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 1 833
Points : 2 154
Points : 2 154
Pour mais ça serait plus joli avec une virgule (quoi je suis chiant ?)
__________________
"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.
xavlours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 15h38   #50
verbose
Membre expérimenté
 
Inscription : juillet 2007
Messages : 729
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 729
Points : 530
Points : 530
Citation:
Envoyé par xavlours Voir le message
Pour mais ça serait plus joli avec une virgule (quoi je suis chiant ?)
Je suis contre cette proposition, mais avec une virgule à la place du pipe, ça serait déjà mieux
verbose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 16h37   #51
Uther
Expert Confirmé Sénior
 
Avatar de Uther
 
Homme
Inscription : avril 2002
Messages : 2 678
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 2 678
Points : 5 107
Points : 5 107
Citation:
Envoyé par DrHelmut Voir le message
J'avais pas pensé aux exceptions de type NullPointer, IO etc que l'on risque de rameuter avec un simple catch(Exception e)... mais là encore

Au final je dirais ni pour ni contre car ce serait un petit plus pour certains, certes, mais pour ceux qui passent par un IDE comme moi on s'en fout pas mal, à moins de tomber sur une méthode renvoyant pléthore d'exceptions (plus de 4-5, ce qui me parait extremement rare) et là à mon avis y'a un soucis dans la conception de la-dite méthode.

Pour les codeurs "à la mano", c'est un gain assez intéressant mais carrément gadget par rapport aux avancées de Java 5 (foreach/autoboxing/polymorphisme paramétrique => vrai gain en temps de codage ET en lisibilité)
Le temps de codage n'est pas vraiment le problème vu que le copier coller que même notepad gère à la perfection, suffit à régler ça. Par contre c'est vraiment un gain (pas enorme mais appréciable) au niveau de la lisibilité/maintenabilité : ca évite d'avoir à se coltiner plusieurs blocs catch totalement identiques.

- Ca plombe inutilement la lisibilité si le bloc catch fait plus de 3/4 lignes
- Si on fait une modif dans un catch il ne faut pas oublier de la reporter dans les autres.
- Quelqu'un qui ne connait pas encore le code va devoir regarder attentivement pour finalement se rendre compte que les deux catchs sont identiques.

La solution que j'utilise en général est de faire une méthode proccessException(...variables nécéssaires...) appelée par chacun des catch: ca limite la duplication de code a une seule ligne mais ce n'est quand même pas particulièrement élégant.
Uther est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 17h10   #52
pierreact
Candidat au titre de Membre du Club
 
Inscription : novembre 2003
Messages : 20
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 20
Points : 14
Points : 14
Par défaut 100% ok

Je suis d'accord avec ce changement et, contrairement a d'autre, je n'ai rien du tout contre la syntaxe.... apres tout, | veut dire "ou"
pierreact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 18h24   #53
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
Citation:
Envoyé par pierreact Voir le message
Je suis d'accord avec ce changement et, contrairement a d'autre, je n'ai rien du tout contre la syntaxe.... apres tout, | veut dire "ou"
Exactement. Un petit truc amusant. Durant le BOF quelqu'un a demandé pour quoi le | et pas le ||.

Vincent
__________________
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 20/12/2007, 18h25   #54
kpouer
Membre confirmé
 
Inscription : mars 2007
Messages : 259
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 259
Points : 251
Points : 251
Contre pour ma part, si les différentes Exceptions ont une classe parente commune autre que Exception, on catche cette classe mère tout betement, sinon de quel type sera l'exception catchée ? Le compilateur le détermine au pif ?
Et si les 2 exceptions n'ont rien de commun, a ce moment ca n'a pas vraiment de sens de les catcher explicitement, autant catcher Exception
kpouer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 19h03   #55
Ricky81
Rédacteur
 
Inscription : octobre 2003
Messages : 7 924
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 7 924
Points : 29 324
Points : 29 324
Citation:
Envoyé par Uther Voir le message
Certes le compilateur pourrait prendre automatiquement la première classe mère commune aux exceptions, mais ça voudrait dire que la classe est définie implicitement. En plus du fait que je trouve ça moche, c'est contraire au pricipe Java qui a un typage explicite.

Nulle par en Java une variable n'existe sans que son type soit explicitement spécifié. Pas même dans le foreach (for(String str : listeDeString)) où ce serait tout à fait possible. Je ne pense pas qu'il faille changer ça surtout, pour une modification assez mineure.


L'héritage n'est pas toujours une bonne solution : cf ce post qui l'explique bien
Lorsque je dis que le compilateur va prendre la première classe commune, c'est essentiellement pour illustrer comment les IDE vont fournir une complétion dans le bloc catch => liste des méthodes communes (et donc implicitement celles de la classe mère commune). Ca ne veut toujours pas dire qu'on manipule cette classe "mère" (cf. deuxième partie de mon message).

Citation:
Envoyé par kpouer Voir le message
Contre pour ma part, si les différentes Exceptions ont une classe parente commune autre que Exception, on catche cette classe mère tout betement, sinon de quel type sera l'exception catchée ? Le compilateur le détermine au pif ?
Et si les 2 exceptions n'ont rien de commun, a ce moment ca n'a pas vraiment de sens de les catcher explicitement, autant catcher Exception
Ca me rend malade de voir des catch Exception non justifiés et foutre par conséquent la merde quand à l'évolutivité du code (imagine que tu modifies une méthode appelée dans le bloc try et qu'elle déclare une nouvelle exception dans la clause throws, tu n'as même pas d'erreur de compilation qui t'alerte du fait que tu as un nouveau cas à gérer, pas cool si justement cette exception était à propager)

Encore une fois, ce n'est que du sucre syntaxique. Le compilateur ne va rien faire d'autre que de traduire cela en plusieurs blocs catch comme s'ils avaient été écris. A aucun moment il n'y aurait de catch (ExceptionMere) généré.
Ricky81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 20h02   #56
the-gtm
Membre expérimenté
 
Inscription : juillet 2006
Messages : 548
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 548
Points : 548
Points : 548
Et là le compilateur il dit quoi?

Code :
1
2
3
4
5
6
7
8
9
10
11
catch(MonExcFille1,MonExcFille2 e) {
  processException(e);
}
 
public void processException(MonExcFille1 e) throws Throwable {
  // ...
}
 
public void processException(MonExcFille2 e) {
  // ...
}
Il dit que les Throwable doivent être déclarées ou catchées ou pas?

Et dans ce cas là? Est ce qu'il renvoie une erreur parce que Throwable n'est jamais lancée?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
catch(MonExcFille1,MonExcFille2 e) {
  try {
    processException(e);
  } catch (Throwable t) {
    //...
  }
}
 
public void processException(MonExcFille1 e) throws Throwable {
  // ...
}
 
public void processException(MonExcFille2 e) {
  // ...
}
Comme dit Uther, tout variable doit avoir un type déclaré.
the-gtm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 20h11   #57
Ricky81
Rédacteur
 
Inscription : octobre 2003
Messages : 7 924
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 7 924
Points : 29 324
Points : 29 324
Il dit erreur de compilation processException est susceptible de lancer un Throwable pour MonExcFille1, comme si tu écrivais

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
catch(MonExcFille1 e) {
  processException(e);
}
catch(MonExcFille2 e) {
  processException(e);
}
 
public void processException(MonExcFille1 e) throws Throwable {
  // ...
}
 
public void processException(MonExcFille2 e) {
  // ...
}
Je crois que tu cherches la petite bête, et je ne vois pas en quoi la déclaration d'un type apporterait une solution.
Ricky81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 20h33   #58
the-gtm
Membre expérimenté
 
Inscription : juillet 2006
Messages : 548
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 548
Points : 548
Points : 548
Et avec le try catch imbriqué, il te donne aussi une erreur (Throwable is never thrown)...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
catch(MonExcFille1 e) {
  try {
    processException(e);
  } catch (Throwable t) {
    //...
  }
}
catch(MonExcFille2 e) {
  try {
    processException(e);
  } catch (Throwable t) {
    //...
  }
}
 
public void processException(MonExcFille1 e) throws Throwable {
  // ...
}
 
public void processException(MonExcFille2 e) {
  // ...
}
C'est pas chercher la petite bête, un langage a une définition formelle. Pour le Java c'est (entre autres choses) d'être fortement typé. Le typage sert par exemple pour résoudre les méthodes appelées, il est aussi utilisé pour vérifier les casts que tu fais, ce code ne compile donc pas:

Code :
1
2
String a = "";
Double b = (Double) a;
Est ce que ce code compilerait ?

Code :
1
2
3
catch(MonExcFille1,MonExcFille2 e) {
  MonExcFille1 ee = (MonExcFille1) e;
}
the-gtm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2007, 04h15   #59
Gargamail
Invité de passage
 
Inscription : décembre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 4
Points : 2
Points : 2
Contre.
À mon avis,
  • soit il y a une classe/interface mère pour les exceptions qu'on veut regrouper,
  • soit les exceptions sont mal définies et cette classe/interface mère devrait exister.
Gargamail est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2007, 10h05   #60
Uther
Expert Confirmé Sénior
 
Avatar de Uther
 
Homme
Inscription : avril 2002
Messages : 2 678
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 2 678
Points : 5 107
Points : 5 107
Citation:
Envoyé par vbrabant Voir le message
Exactement. Un petit truc amusant. Durant le BOF quelqu'un a demandé pour quoi le | et pas le ||.

Vincent
Je me suis également posé cette question avant d'arriver à la conclusion que aucun des deux n'était vraiment à sa place dans un catch.

C'est vrai qu'il y a une notion de "ou" et que "||" peut sembler plus adapté car il fait un ou logique. Mais "|" et "||" sont tous deux en JAVA des opérateurs, ce qui signifie qu'ils sont sensés transformer leurs opérandes en un résultat qui sera traité.

Au début je me suis dit ok on peut se dire que le "|" entre 2 classes retourne le premier parent commun donc IOException|SQLException vaut Exception. Dans ce cas là "|" est en effet plus adapté que "||" qui retourne un booleen quels que soient ses opérandes.

Mais ici "|" n'est clairement pas un opérateur. En effet tout l'interet de cette proposition c'est que catch(IOException | SQLException e) ne doit pas être équivalent à catch(Excpetion e).
Donc "|" a bien une effet de séparateur, pas d'opérateur. Dans le role du séparateur, la "," ou le ";" sont tout a fait indiqués plutot que donner a "|" un role de séparateur dans un catch et d'opérateur partout ailleurs.
Uther 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 20h16.


 
 
 
 
Partenaires

Hébergement Web