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

Langage Java Discussion :

Abuser de throwable


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Par défaut Abuser de throwable
    Je naviguais tranquillement dans la javadoc pour regarder un peu les différents exception disponible et ce à quoi elles étaient destinées et je me suis dit qu'il pourrait être fun de faire hériter certains de ces objets de Throwable pour ensuite utiliser des throw à la place d'un return et pouvoir de ce faire renvoyer un peu ce qu'on veut.

    Une solution un peu plus propre serait de faire une Exception d'encapsulation dont la seule utilité est de faire remonté un objet choisi.

    En écrivant ça, je me dit qu'on peut aussi déclarer son type de retour en Object et le caster ensuite, mais je trouve ça moins cool...

    Y-a t'il des choses qui s'opposent à une telle utilisation du throwable en java, et niveau perf, ça donnerait quoi selon vous? Bon, je ne pense pas l'utiliser du tout, mais ça pourrait être drôle... xD

  2. #2
    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
    Salut,

    On peut aussi :
    • Utiliser le return pour gérer les cas d'erreur
    • Ou mieux utiliser un attribut static "errno" que chaque méthode viendrait modifier arbitrairement en cas d'erreur, avec des constantes défini un peu partout.
    • On peut également utiliser un while(true){ ... ; break; } en remplacement des if
    • Utiliser des int pour les valeurs booléennes (0==FAUX, tout le reste==VRAI)
    • etc...


    Ah là là qu'est-ce que ce serait drôle ! Surtout quand on verra la tête de celui qui reprendra le code...

    a++

    PS : Tu comprend bien que tout ceci est ironique. Java propose un cadre assez structuré et propre, alors autant l'utiliser tel quel et faire quelque chose de propre...

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    c'est une blague

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Il est parfois intéressant pour certaines exception de remonter un objet, cela dit. Mais ce n'est en rien une façon de remplacer le return ou autre usage bizzaroïde

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Par défaut
    J'aime beaucoup la réponse ...

    Pour l'ironie, il me semble que j'avais suivi, je suis bien fan du fait d'utiliser 3 principe du C comme exemple (y'a que le while(true) qui échappe à la règle...).

    Et bien évidemment, je ne compte jamais l'utiliser dans le cadre d'un programme, sauf si c'est dans le cadre d'une blague ou pour participer à l'IOCCC. Mais le détournement est tout de même sympa dans l'idée...

    Si jamais j'apprends le java a mon neveu un jour, il doit y avoir moyen de ne pas utiliser de return...

    Et puis en poussant encore plus loin le vice, on peut faire du pattern matching, en faisant plusieurs cas, en fonction de la throw utilisé pour sortir de la fonction. Pour peu qu'on lance plusieurs erreurs différents, on peut directement faire le traitements associés en retour sans avoir de cast à faire...

    Par contre, plus sérieusement, et c'était un peu sur ça que portait la dernière phrase de mon premier post, ça donnerait quoi niveau perf? Dans la JVM, faire un return ou un throw, ca revient à peu près au même ou pas? (genre un flag qui dit si il y a erreur ou pas, ou même juste un objet, qui dans le cas ou il n'y a pas d'erreur correspond au return et sinon à l'erreur). Qu'est ce qu'il se passe exactement quand on fait un throw?

  6. #6
    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
    Citation Envoyé par Babcool Voir le message
    je suis bien fan du fait d'utiliser 3 principe du C comme exemple (y'a que le while(true) qui échappe à la règle...).
    Pourtant j'aime bien le C. Il n'est pas mauvais en soit. Le problème c'est qu'on peut y faire n'importe quoi


    Citation Envoyé par Babcool Voir le message
    Dans la JVM, faire un return ou un throw, ca revient à peu près au même ou pas?
    Le throw en lui même n'est pas vraiment plus couteux qu'un return. Par contre ce qui est couteux c'est la création de l'exception, à cause de la génération du stacktrace si utile au debug

    Plus d'info ici : Exception & Performance

    a++

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Le throw en lui même n'est pas vraiment plus couteux qu'un return. Par contre ce qui est couteux c'est la création de l'exception, à cause de la génération du stacktrace si utile au debug

    Plus d'info ici : Exception & Performance
    Bah ça réponds effectivement super bien au côté sérieux de ce topic Merci pour ce lien (et pour le test derrière puisque c'est toi qui l'a fait ).

    [HS] Chui bien fan du C aussi, ma dernière tentative de détournement consistait à caster un char* en pointeur de fonction pour faire un hello world, mais j'ai jamais réussi à l'exécuter, car j'étais dans une zone mémoire non exécutable... [/HS]


    PS: J'ai fait retourner un ptit coup le code que tu avais fait pour ton test, histoire de voir si les résultats sont différents depuis 2005, voilà ce que ca donne :
    * 5000000 appels de methode avec 'string':
    methodReturnInt : 14 ms.
    methodReturnObject : 22 ms.
    methodThrowsNoStack : 17 ms.
    methodThrowsException : 18 ms.

    * 5000000 appels de methode avec 'null':
    methodReturnInt : 79 ms.
    methodReturnObject : 96 ms.
    methodThrowsNoStack : 336 ms.
    methodThrowsException : 7184 ms.

Discussions similaires

  1. DynDNS, problèmes d'abuse
    Par TNorth dans le forum Hébergement
    Réponses: 1
    Dernier message: 08/08/2005, 18h14
  2. [Exception] récupération de la stack trace d'une Throwable
    Par totof2308 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 14/05/2004, 14h49

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