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 / continue


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut Break / continue
    Citation Envoyé par ®om
    Non, tu dois forcément finir ton traitement (donc tu fais des if(isInterrupted()) de temps en temps entre 2 traitements de temps en temps, pour lui donner des points où il peut s'arrêter...)...
    et tu sors de la boucle en faisant un break ;


    Note du modérateur : ces messages proviennent d'un autre message ( Thread, Arrête toi je le veux !) et ont été déplacé car ils étaient Hors-Sujet

    Citation Envoyé par Kikito
    Pour continuer une conversation commencer dans un lieu ou ce n'était pas le sujet :
    Pour ou contre les break/continue dans les boucles ?

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par schniouf
    donc si je comprend bien pour une boucle for de i=1 à i=10, tu fais i=11, et pour while tu t'arranges pour que la condition soit fausse.
    C'est bien, mais dans ce cas là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for( int i=0 ; i<=10 ; i++ )
    {
       ... // Instructions 1
       if( condition )
          i = 11 ;
       ... // Instructions 2
    }
    Instructions 2 est exécuté quand même. L'avantage du break c'est qu'on sort de la boucle tout de suite. Ou alors j'ai mal compris ta méthode .
    Si tu as besoin de faire ça, c'est que tu as mal conçu ton algorithme...

    En gros, si tu veux par exemple parcourir un tableau et t'arrêter quand tu trouves le résultat recherché, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int i = 0;
    boolean contains = false;
    while(i < tab.length && !contains) {
        if(tab[i].equals("tachaine")) {
            contains = true;
        }
        i++;
    }
    Si tu as des "//instructions 2" comme dans ton exemple (ce qui ne se présente que dans des cas particuliers - souvent tu peux réorganiser pour faire différemment-), il faut refaire un if(condition) { //instructions 2 } où condition est équivalente à la condition de ton while/for...

  3. #3
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Citation Envoyé par ®om
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int i = 0;
    boolean contains = false;
    while(i < tab.length && !contains) {
        if(tab[i].equals("tachaine")) {
            contains = true;
        }
        i++;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public boolean contient() {
    int i = 0;
    while(i < tab.length) {
        if(tab[i].equals("tachaine"))
            return true;
        i++;
    }
    return false ;
    }
    Ca marche très bien et je ne vois pas en quoi ce n'est pas propre. Après c'est vrai que j'ai appris à programmer de la manière dont tu le dis, mais bon. Le truc que je trouve vraiment dégueu c'est les goto

    EDIT : on est en train de lui pourrir son post avec nos théories, vaudrait mieux arrêter ou bien ouvrir un nouveau post

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par schniouf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public boolean contient() {
    int i = 0;
    while(i < tab.length) {
        if(tab[i].equals("tachaine"))
            return true;
        i++;
    }
    return false ;
    }
    Ca marche très bien et je ne vois pas en quoi ce n'est pas propre. Après c'est vrai que j'ai appris à programmer de la manière dont tu le dis, mais bon. Le truc que je trouve vraiment dégueu c'est les goto

    EDIT : on est en train de lui pourrir son post avec nos théories, vaudrait mieux arrêter ou bien ouvrir un nouveau post
    Là ça va, c'est un return, c'est pas un break... C'est moins correct qu'en le mettant à la fin, mais c'est plus acceptable qu'un break...

    Voilà pourquoi... Un élément essentiel dans le développement de logiciels, c'est la maintenance. Et là, imagine tu dois modifier la méthode, pour traiter le résultat (plutôt que de le retourner), tu vas être obligé de modifier ta boucle (tu vas me dire, sur cet exemple, c'est pas coûteux), alors que si tu fais le return qu'à la fin, bah tu laisses ta boucle telle quelle...

    Le problème du break/continue est aussi un problème de maintenance...

    Imagine tu dois faire un traitement particulier...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(int i = 0; i < tab.length; i++) {
        if(isOK(tab[i], 5) {
            //isOK caractéristique quelconque dépendante de l'entier passé en paramètre, qui renvoie un booléen
            break;
        }
    }
    Et en fait plus tard, tu veux rajouter une boucle "interne"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i = 0; i < tab.length; i++) {
        for(int j = 0; j < tab2.length; j++) {
            if(isOK(tab[i], j) {
                //isOK caractéristique quelconque dépendante de l'entier passé en paramètre, qui renvoie un booléen
                break;
            }
        }
    }
    Et bien tu es obligé de refaire totalement ta boucle, car le break s'applique maintenant sur la boucle en j...

  5. #5
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Dans ce cas j'suis d'accord. Je m'incline .

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par manblaizo
    Tu es sûr de ne pas confondre avec un autre langage ? Parce que ça, je l'ai jamais lu nulle part, même pas dans la spécification.
    ça n'est pas spécifique au Java, c'est les "bases" de l'algorithmique, que l'on doit appliquer en Java, en C, etc...

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Par défaut
    Citation Envoyé par ®om
    ça n'est pas spécifique au Java, c'est les "bases" de l'algorithmique, que l'on doit appliquer en Java, en C, etc...
    Mais tu sais que tous les mots clé n'ont pas toujours la même signification d'un langage à un autre, et justement en Java, break et continue permettent de sortir d'une boucle sans avoir à exécuter les instructions suivantes dans la boucle. C'est ce qui est fait aussi dans un switch, s'il n'y a pas de break, toutes les instructions "case" suivantes sont exécutées jusqu'au premier break rencontré. Donc en principe ce comportement n'est pas lié à l'algorithmique mais bien à l'implémentation propre de chaque langage de programmation.

  8. #8
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par manblaizo
    Mais tu sais que tous les mots clé n'ont pas toujours la même signification d'un langage à un autre, et justement en Java, break et continue permettent de sortir d'une boucle sans avoir à exécuter les instructions suivantes dans la boucle. C'est ce qui est fait aussi dans un switch, s'il n'y a pas de break, toutes les instructions "case" suivantes sont exécutées jusqu'au premier break rencontré. Donc en principe ce comportement n'est pas lié à l'algorithmique mais bien à l'implémentation propre de chaque langage de programmation.
    Justement, en algorithmique, il est impossible d'exprimer un break/continue. Donc il ne "faut pas" les utiliser non plus dans les langages.

    Sinon, break/continue, quelque soit le langage, à ma connaissance ça a le même sens...

Discussions similaires

  1. [Débutant] for imbriqués, break, continue, goto : grmpf ?
    Par StringBuilder dans le forum C#
    Réponses: 3
    Dernier message: 14/06/2012, 17h12
  2. "if else" : break / continue
    Par JohnNC dans le forum Langage
    Réponses: 7
    Dernier message: 19/02/2007, 13h28
  3. Réponses: 4
    Dernier message: 28/05/2006, 22h11
  4. break/continue
    Par Nomade95000 dans le forum Oracle
    Réponses: 6
    Dernier message: 03/01/2006, 17h22

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