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 :

Break et continue


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Par défaut Break et continue
    Bonjour,

    Le break est bien pratique pour sortir d'une boucle mais parait un peu trop facile. En particulier dans le cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(int i=0; i<tab.length(),i++){
      if (tab[i] == 4){
         bfind=true;
         break;
      }
    }
    Pouvez vous me dire si l'utilisation d'un break au sein d'une boucle for ou while est une bonne pratique? Le fait d'utiliser break a t il des conséquences négatives sur l'execution du programme (par exemple au niveau des optimisation des performances, ...) , ou si cela reviens au même de programmer sans les break?

    Je n'arrive pas à trouver de réponse argumentée à ce sujet.

    Merci par avance.

    Arnaud.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 497
    Par défaut
    Le déroulement de toutes les instructions d'itération peut être contrôlé de l'intérieur du corps de la boucle au moyen des instructions break et continue. L'instruction break sort de la boucle sans exécuter la suite des instructions. L'instruction continue arrête l'exécution de l'itération courante, et l'exécution reprend en début de boucle avec l'itération suivante.

    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
    //: c03:BreakAndContinue.java
    // Démonstration des mots clefs break et continue.
     
    public class BreakAndContinue {
      public static void main(String[] args) {
        for(int i = 0; i < 100; i++) {
          if(i == 74) break; // Sortie définitive de la boucle for
          if(i % 9 != 0) continue; // Continue avec l'itération suivante
          System.out.println(i);
        }
        int i = 0;
        // une "boucle infinie" :
        while(true) {
          i++;
          int j = i * 27;
          if(j == 1269) break; // Sortie de boucle
          if(i % 10 != 0) continue; // Début de boucle
          System.out.println(i);
        }
      }
    } //
    Dans la boucle for la valeur de i n'atteint jamais 100 car l'instruction break termine la boucle lorsque i prend la valeur 74. En principe, il ne faudrait pas utiliser break de cette manière, à moins que l'on ne connaisse pas le moment où la condition de fin arrivera. L'instruction continue provoque un branchement au début de la boucle d'itération (donc en incrémentant i) chaque fois que i n'est pas divisible par 9. Lorsqu'il l'est, la valeur est imprimée.

    La seconde partie montre une « boucle infinie » qui, théoriquement, ne devrait jamais s'arrêter. Toutefois, elle contient une instruction break lui permettant de le faire. De plus, l'instruction continue retourne au début de la boucle au lieu d'exécuter la fin, ainsi la seconde boucle n'imprime que lorsque la valeur de i est divisible par 10.

    http://www.google.fr/search?hl=fr&cl...a=lr%3Dlang_fr
    1er lien.

    @+


    NB : Le principe d’optimisation consiste à ne pas continuer à tester lorsque le résultat est connu.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Par défaut
    Merci pour ta réponse,

    Elle est très claire.

    Existe t il de bonnes raisons de ne pas l'utiliser?

  4. #4
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Arnaoud Voir le message
    Existe t il de bonnes raisons de ne pas l'utiliser?
    Je n'en vois pas, sauf peut-être l'envie de se faire braire avec des if

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Je n'en vois pas, sauf peut-être l'envie de se faire braire avec des if
    Vin de dious ! J'me s'rais attendu à lire des "les breaks et continue faut pas utiliser, c'est un résidu de goto beurk beurk" !

    J'utilise de temps en temps, par pure flemme de réfléchir à l'instruction while ou dowhile qui irait bien pour sortir de la boucle sans utiliser break.

  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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par natha Voir le message
    Vin de dious ! J'me s'rais attendu à lire des "les breaks et continue faut pas utiliser, c'est un résidu de goto beurk beurk" !
    Pourquoi tu dis ça ? J'ai l'air d'un intégriste des langages de programmation ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Par défaut
    les breaks et continue faut pas utiliser, c'est un résidu de goto beurk beurk
    J'avais envie de répondre la même chose que toi. Mais pourquoi ??? Ca parait pratique quand même.

    J'ai imaginé deux raisons:
    - Pb d'optimisations au niveau de la compil
    - Risque d'erreur si l'on rajoute un bloc dans le while, le break sortira du bloc mais pas du while.

    C est assez maigre comme raison, Je ne vois rien de plus concret.

    Merci de vos réponses

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 497
    Par défaut
    si ils y sont, c'est que c'est pas pour les chiens ! beuh !


    NB :

    Arnaoud :
    il dit précédemment :

    Vin de dious ! J'me s'rais attendu à lire des "les breaks et continue faut pas utiliser, c'est un résidu de goto beurk beurk" !

  9. #9
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Pourquoi tu dis ça ? J'ai l'air d'un intégriste des langages de programmation ?
    Pas toi particulièrement, mais c'est ce que j'ai eu l'occasion de lire assez souvent.

    Utilisé avec parcimonie là où ça améliore la lisibilité ça ne me dérange pas personnellement.

    Il faut savoir qu'on a aussi la possibilité d'utiliser les labels, et là je suis plus réservé sur le bienfondé de leur utilisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    		TEST: for (int i = 0; i < 1000; i++) {
    			if (i < 500) {
    				continue TEST;
    			}
    			for (int j = 0; j < 1000; j++) {
    				if (i + j == 1500) {
    					break TEST;
    				} else if (i > j) {
    					continue;
    				} else {
    					continue TEST;
    				}
    			}
    		}
    Sûr que vous rigolez moins maintenant

  10. #10
    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,

    Citation Envoyé par natha Voir le message
    Utilisé avec parcimonie là où ça améliore la lisibilité ça ne me dérange pas personnellement.
    +1 c'est comme tout il ne faut pas en abuser !

    Cela peut rendre le code plus simple et plus lisible, tout comme cela peut générer un code affreux !


    Mais perso j'aurais tendance à privilégier les break afin d'éviter d'avoir des conditions d'arrêt à rallonge...


    a++

  11. #11
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    L'usage doit en être modéré de la même façon qu'un goto en C/C++ (oui ce n'est pas mal d'utiliser un goto dans des cas bien précis).

    L'intérêt majeur d'un break, c'est que la continuation est connue: on s'échape de la boucle locale et on exécute les instructions qui la suivent. Maintenant quand on labélise les boucles imbriquées, ca devient bien plus chaud de s'y retrouver !

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Par défaut
    Je vous remercie pour les réponses.

    Je peux donc résumer le débat par:
    On peut utiliser des breaks s'ils ne diminuent pas la lisibilité du code.
    A part ces problèmes de lisibilité, Il n'y a pas d'autres raisons apparement de ne pas les utiliser.

    Arnaud

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

Discussions similaires

  1. Break et Continue label
    Par Darkaurora dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/02/2014, 18h56
  2. Différence entre break et continue
    Par prugne dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 04/05/2012, 14h41
  3. Probléme avec "break" et "continue"
    Par fredo3il dans le forum Débuter
    Réponses: 8
    Dernier message: 19/11/2007, 10h58
  4. Réponses: 4
    Dernier message: 28/05/2006, 22h11

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