Publicité

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

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

    334 86,75%
  • Contre

    51 13,25%
+ Répondre à la discussion
Page 3 sur 9 PremièrePremière 1234567 ... DernièreDernière
Affichage des résultats 41 à 60 sur 171
  1. #41
    Expert Confirmé Sénior Avatar de Uther
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    3 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2002
    Messages : 3 075
    Points : 6 760
    Points
    6 760

    Par défaut

    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)

  2. #42
    Membre expérimenté
    Avatar de bmoussaud
    Profil pro Benoit Moussaud
    Inscrit en
    décembre 2003
    Messages
    218
    Détails du profil
    Informations personnelles :
    Nom : Benoit Moussaud
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 218
    Points : 555
    Points
    555

    Par défaut

    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

  3. #43
    Membre habitué Avatar de ludosoft
    Homme Profil pro Ludovic Martin
    Chef de projet technique
    Inscrit en
    juillet 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Nom : Homme Ludovic Martin
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : juillet 2002
    Messages : 96
    Points : 114
    Points
    114

    Par défaut

    Pour, mais en changeant "|" pas une ",".

  4. #44
    Expert Confirmé Sénior

    Inscrit en
    décembre 2003
    Messages
    2 847
    Détails du profil
    Informations forums :
    Inscription : décembre 2003
    Messages : 2 847
    Points : 6 798
    Points
    6 798

    Par défaut

    Pour. J'attends ça depuis longtemps.
    Les brevets ? Le type qui a inventé l'eau chaude doit être grave blindé de thunes !

  5. #45
    Membre actif Avatar de DrHelmut
    Homme Profil pro Hugo Capocci
    Directeur technique
    Inscrit en
    octobre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Nom : Homme Hugo Capocci
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2005
    Messages : 110
    Points : 191
    Points
    191

    Par défaut

    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 !

  6. #46
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2006
    Messages : 221
    Points : 131
    Points
    131

    Par défaut

    Pour, c' est vrai que pour plusieurs exceptions catchées on veuille faire les même s traitements => diminution de code.

  7. #47
    Expert Confirmé Sénior Avatar de Uther
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    3 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2002
    Messages : 3 075
    Points : 6 760
    Points
    6 760

    Par défaut

    pourquoi annoncer
    catch(MonExcFille1,MonExcFille2 : MonExcMere)
    et pas juste les exceptions filles? Je trouve que donner la classe mere ne sert pas à grand chose.
    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.

    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

  8. #48
    Membre actif Avatar de DrHelmut
    Homme Profil pro Hugo Capocci
    Directeur technique
    Inscrit en
    octobre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Nom : Homme Hugo Capocci
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2005
    Messages : 110
    Points : 191
    Points
    191

    Par défaut

    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é)

  9. #49
    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
    Points : 2 348
    Points
    2 348

    Par défaut

    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.

  10. #50
    Membre expérimenté
    Inscrit en
    juillet 2007
    Messages
    773
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 773
    Points : 597
    Points
    597

    Par défaut

    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

  11. #51
    Expert Confirmé Sénior Avatar de Uther
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    3 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2002
    Messages : 3 075
    Points : 6 760
    Points
    6 760

    Par défaut

    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.

  12. #52
    Futur Membre du Club
    Inscrit en
    novembre 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 21
    Points : 16
    Points
    16

    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"

  13. #53
    Expert Confirmé Sénior

    Inscrit en
    mai 2003
    Messages
    3 251
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 3 251
    Points : 10 542
    Points
    10 542

    Par défaut

    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.

  14. #54
    Membre confirmé
    Inscrit en
    mars 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 259
    Points : 281
    Points
    281

    Par défaut

    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

  15. #55
    Expert Confirmé Sénior


    Inscrit en
    octobre 2003
    Messages
    7 870
    Détails du profil
    Informations forums :
    Inscription : octobre 2003
    Messages : 7 870
    Points : 33 294
    Points
    33 294

    Par défaut

    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é.

  16. #56
    Membre chevronné
    Inscrit en
    juillet 2006
    Messages
    548
    Détails du profil
    Informations forums :
    Inscription : juillet 2006
    Messages : 548
    Points : 614
    Points
    614

    Par défaut

    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é.

  17. #57
    Expert Confirmé Sénior


    Inscrit en
    octobre 2003
    Messages
    7 870
    Détails du profil
    Informations forums :
    Inscription : octobre 2003
    Messages : 7 870
    Points : 33 294
    Points
    33 294

    Par défaut

    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.

  18. #58
    Membre chevronné
    Inscrit en
    juillet 2006
    Messages
    548
    Détails du profil
    Informations forums :
    Inscription : juillet 2006
    Messages : 548
    Points : 614
    Points
    614

    Par défaut

    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;
    }

  19. #59
    Invité de passage
    Inscrit en
    décembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 4
    Points : 2
    Points
    2

    Par défaut

    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.

  20. #60
    Expert Confirmé Sénior Avatar de Uther
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    3 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2002
    Messages : 3 075
    Points : 6 760
    Points
    6 760

    Par défaut

    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.

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
  •