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 :

La syntaxe de goto en Java


Sujet :

Langage Java

  1. #21
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    C'était juste histoire de chambrer un peu...

    Ca fait 6 ans que je développe avec les patterns et tout le bazar et c'est vrai que dès que tu manipules des frameworks techniques, t'es bien obligé de cracher de la ligne de code à la suite...

    Je suis bien d'accord avec toi en tout cas que de factoriser du code pour le plaisir n'a absolument aucun intérêt. D'ailleurs concevoir n'a rien à avoir avec factoriser du code !

    Voilà mon avis à 2 balles...

  2. #22
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ghervouin Voir le message
    Voilà mon avis à 2 balles...
    Et voilà l'travail ! Tu t'es fait corriger par des gens qui ne sont pas là pour rigoler ou qui ont également la tête dans le c.. (Je parle pour moi les gars, inutile de m'envoyer bouler, j'rigole )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #23
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 17
    Points : 73
    Points
    73
    Par défaut
    Je déterre ce message – j'adore déterrer – pour exposer mon expérience récente (la dernière heure) :

    Pour moi, l'absence de goto en Java, bien que venant d'intention louables, pose quand même problème dans certaines situations un peu particulières.

    Nom : activity_diagram_setter_object.jpg
Affichages : 294
Taille : 56,3 Ko

    Quand ce flux est contenu dans une seule et unique méthode, j'utilise return (attention, c'est du EBean et tout un foutoir de Json...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void setAdresse(JsonNode adresse) {
            if (adresse.has("id")) {
                this.adresse = Adresse.find.byId(UUID.fromString(adresse.get("id")
                        .asText()));
                if (this.adresse != null)
                    return;
            }
            List<Adresse> adresseList = Adresse.search(adresse);
            if (adresseList.size() == 1) {
                this.adresse = adresseList.get(0);
                return;
            }
            this.adresse = Adresse.fromJson(adresse);
        }
    Quand je ne peux pas sortir d'une méthode (la logique n'est qu'une partie d'une méthode un peu plus vaste), c'est moche, j'utilise une fausse boucle while, un label et des break :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    bloc: while (true) {
                    if (contactNode.has("id")) {
                        contact = Contact.find.byId(contactNode.get("id").asInt());
                        if (contact != null)
                            break bloc;
                    }
                    List<Contact> contactList = Contact.search(contactNode);
                    if (contactList.size() == 1) {
                        contact = contactList.get(0);
                        break bloc;
                    }
                    contact = Contact.fromJson(contactNode);
                    break bloc;
                }
    Bien sûr, il y a probablement d'autres solutions, c'est la plus claire que j'ai trouvée pour le moment. Je vois difficilement comment factoriser ce genre de truc.

  4. #24
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Pierre-Yves Le Dévéhat Voir le message
    Quand je ne peux pas sortir d'une méthode (la logique n'est qu'une partie d'une méthode un peu plus vaste),
    Situation parfaitement illégitime et indéfendable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    address = extractAddress(contactNode);
     
    /* ... */
     
    private static String extractAddress(JsonNode adresse) {
      if (adresse.has("id")) {
        String candidate = Adresse.find.byId(UUID.fromString(adresse.get("id")
          .asText()));
        if (candidate != null) {
          return candidate;
        }
      }
     
      List<Adresse> adresseList = Adresse.search(adresse);
      if (adresseList.size() == 1) {
        return adresseList.get(0);
      }
      return Adresse.fromJson(adresse);
    }
    Ou alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    address = AddressExtraction.fromNode(contactNode);
     
    /* ... */
     
    class AddressExtraction {
     
      static String fromNode(JsonNode adresse) {
        String candidate = byId(adresse);
        if(candidate == null) {
     
          List<Adresse> adresseList = Adresse.search(adresse);
          if(adresseList.size() == 1) {
            return adresseList.get(0);
          } else {
            return Adresse.fromJson(adresse);
          }
        } else {
          return candidate;
        }
      }
     
      private static String byId(JsonNode adresse) {
        if (adresse.has("id")) {
          return Adresse.find.byId(UUID.fromString(adresse.get("id")
            .asText()));
        } else {
          return null;
        }
      }
    }

    Ce ne sont pas les solutions simples, claires et donc par définition bien meilleures que du goto, qui manquent.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #25
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    pour les amateurs de curiosités (et sans rapport direct avec les gotos)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SI_TOUT_OK: {
       //codes
    }
    petit challenge à la communauté: exhiber des exemples pertinents d'utilisation de ce truc en Java
    (de mémoire je crois que ça m'est arrivé deux fois ... mais il faudrait que je me plonge dans mes archives )
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  6. #26
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 17
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ce ne sont pas les solutions simples, claires et donc par définition bien meilleures que du goto, qui manquent.
    Effectivement, je trouvais juste que devoir créer une méthode byId était un peu de trop, mais c'est toujours plus élégant que ce que je proposais.
    Sinon, juste pour info, dans mes exemples, on n'attend pas une String mais un objet Adresse. J'ai adapté, notamment en incorporant les méthodes extract et byId à la classe Adresse (évitant ainsi de devoir les reproduire dans toutes les autres classes nécessitant ce mécanisme de récupération d'Adresse). Merci, en tous cas, pour le coup de main.

Discussions similaires

  1. un goto en java!
    Par moon5 dans le forum Langage
    Réponses: 14
    Dernier message: 26/08/2007, 12h11
  2. utilisation de jump ou de goto dans java
    Par dracula2000 dans le forum Langage
    Réponses: 5
    Dernier message: 06/03/2006, 11h27
  3. [Info]Copie un code java en gardant les couleur des syntaxes
    Par Thzith dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 17/01/2006, 20h51
  4. [JDBC]problème de syntaxe dans une requête en java...
    Par chti_juanito dans le forum JDBC
    Réponses: 60
    Dernier message: 04/11/2005, 16h47
  5. [langage] Pb de syntaxe avec GOTO
    Par BEAUJAULT dans le forum Langage
    Réponses: 2
    Dernier message: 14/10/2004, 16h02

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