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

avec Java Discussion :

L'équivalence de la fonction goto en java


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 32
    Points : 24
    Points
    24
    Par défaut L'équivalence de la fonction goto en java
    Bonjour,

    J'ai l'habitude de programmer en delphi, c'est mon premier programme en Java.
    Je veux savoir s'il y a une fonction qui permet d'arrêter à une condition donné et revenir à une instruction précis, comme la fonction goto en delphi.

    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Aie... L'instruction "goto" c'est le mal absolu dans un langage de programmation et à ma connaissance Java ne l'implémente pas. Ce n'est pas pour rien que la plupart des langages ne le proposent pas: le risque c'est de se retrouver avec des programmes illisibles ou dont il est très difficile de suivre le fil. Et il y a toujours moyen de faire autrement (par un appel de méthode par exemple).

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 32
    Points : 24
    Points
    24
    Par défaut
    Merci neuromencien pour la réponse.
    Dans mon programme, je suis obligé de sortir du boucle à une certaine condition.
    Quel est donc cette méthode qui peut le faire?

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Tu peux sortir d'une boucle avec l'instruction break, tout simplement. Quoi qu'en général il est préférable pour la lecture de garder ta condition de sortie dans la condition de la boucle.

    Le goto est une vieille instruction qui date de l'époque spaghetti où on s'en foutais de faire sauter le programme dans tous les sens. Sur des paradigmes comme la programmation object, ce genre d'instruction n'a aucun sens car il ne serait pas possible de définir comment cette instruction marcherait tout en respectant l'objet. Quand on a besoin d'un goto, c'est qu'on a mal réfléchi sa logique . J'ai programmé quelques années en pascal puis delphi. Jamais eu besoin de goto.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Pour les boucles, il est existe tout de même une notion de label, afin de pouvoir contrôler de quel niveau d'imbrication on souhaite sortir (le break arrête la boucle courante).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    loop1: for (int i=0; i<10; i++) {
       //[du code ici]
       for (int j=0; j<50;j++) {
          //[encore du code]
          if (test() == 1) {     
             break;   //ici on sort de la boucle for j
          }
          else if (test() == 2) {
               break loop1;           //ici on sort de la boucle for i
          }
       }
    }

    Il est cependant très très rare d'en avoir besoin (on peut régler ça en vérifiant les conditions de sortie dans la boucle et en jouant dessus à l'endroit où on veut sortir). Mais ça à le mérite d'exister pour le cas où le code est court et ou on à un peu la flemme

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Comme dit précédemment, il n'y a aucun besoin de "goto", quelque soit les langages d'ailleurs (même en RPG je n'en utilisais pas... pour dire ! ), et comme le dit tchize_, quand on met des "goto", c'est qu'on a mal pensé son programme.

    Si on prend l'exemple ci-dessus, il suffirait de mettre les 2 boucles imbriquées dans une fonction et d'utiliser tout simplement un "return" pour quitter.
    On peut garder le break pour sortir de la deuxième boucle et passer à l'occurrence suivante de la boucle principale.

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 32
    Points : 24
    Points
    24
    Par défaut
    Merci pour vos réponses.

    comme j'ai compris que break permet de sortir complètement de la boucle, alors que je veux sortir seulement pour les compteurs i qui ne vérifier pas la condition ensuite incrémenter le compteur et terminer la boucle.
    Je ne peux pas faire la condition de sortie dans la condition de la boucle car je dois calculer le nombre de fois où la condition de sortie est vérifié.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par codepvc Voir le message
    comme j'ai compris que break permet de sortir complètement de la boucle, alors que je veux sortir seulement pour les compteurs i qui ne vérifier pas la condition ensuite incrémenter le compteur et terminer la boucle.
    Ça me semble contradictoire : si tu dois compter le nombre de fois qu'une condition est vraie, alors ce n'est une condition de sortie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int compteur=0;
    for(int i=0; i<n; i++) {
        if ( test(i) ) {
            compteur++;
        }
    }
    Si ton but est de boucle lorsque la condition est vraie sans réaliser le reste du code après le test de la condition tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int compteur=0;
    for(int i=0; i<n; i++) {
        // faire quelque chose
        if ( test(i) ) {
            compteur++;
        }
        else {
            // faire autre chose
        }
    }
    Eventuellement, il y a un mot clef qui ressemble à un goto : continue, qui permet de reboucler sans faire le code de l'itération qui se trouve après.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int compteur=0;
    for(int i=0; i<n; i++) {
        // faire quelque chose
        if ( test(i) ) {
            compteur++;
            continue;
        }
        // faire autre chose
    }
    est équivalent au premier code.

    Citation Envoyé par codepvc Voir le message
    Je ne peux pas faire la condition de sortie dans la condition de la boucle car je dois calculer le nombre de fois où la condition de sortie est vérifié.
    Une condition de sortie, comme son nom l'indique, fait sortir de la boucle lorsqu'elle est vraie. Donc inutile de compter quand elle est vraie : dès qu'elle l'est, on sort, donc c'est 0 ou 1.
    Si tu as besoin de savoir qu'elle a été vraie une fois, on peut utiliser une variable.
    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
    boolean trouve=false;
    for(int i=0; i<n; i++) {
        // faire quelque chose
        if ( test(i) ) {
            trouve=true;
            break;
        }
        // faire autre chose
    }
    if ( trouve ) {
       // on a trouvé
    }
    else {
       // on n'a pas trouvé
    }
    Dès qu'on a trouvé on arrête de boucler. Si on supprime le break, on peut savoir quand même qu'on a trouvé, mais on fait la boucle complètement. Si on met un continue à la place du break, on ne fait que "faire autre chose" que quand la condition est fausse.

    ou
    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
    int trouve=-1;
    for(int i=0; i<n; i++) {
        // faire quelque chose
        if ( test(i) ) {
            trouve=i;
            break; 
        }
        // faire autre chose
    }
    if ( trouve>=0 ) {
       // on a trouvé et l'index trouvé est dans la variable trouve
    }
    else {
       // on n'a pas trouvé
    }
    Dès qu'on a trouvé on arrête de boucler, donc trouve contient l'index du premier trouvé. Si on supprime le break, on peut savoir quand même qu'on a trouvé, mais on fait la boucle complètement, donc trouve contient l'index du dernier trouvé. Si on met un continue à la place du break, on ne fait que "faire autre chose" que quand la condition est fausse, et trouve contient le dernier index trouvé.

    Ou alors ce n'est pas une condition de sortie, et on est dans le cas des codes ci-avant.

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 32
    Points : 24
    Points
    24
    Par défaut
    Merci joel.drigo.
    je pense que c'est continue qui va faire le travail ,je vais essayer de l'utiliser.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction eval en java ?
    Par ramislebob dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2006, 00h22
  2. Réponses: 16
    Dernier message: 20/12/2005, 14h54
  3. [Info] Appeler une fonction Ada95 depuis Java
    Par mmathieu dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 15/09/2005, 09h42
  4. [FLASH MX2004] - Fonction GOTO...
    Par Neutrino- dans le forum Flash
    Réponses: 3
    Dernier message: 12/05/2005, 00h29
  5. [String] équivalent de la fonction eval() en javascript
    Par jeyce dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 01/09/2004, 08h42

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