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

Langages de programmation Discussion :

for(;;) ou while(true) ?


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Par défaut for(;;) ou while(true) ?
    Bonjour,
    J'aurai aimer connaitre la différence entre l'utilisation de for( ; ; ) par rapport a while(true) (ou while(1) selon les langages)

    Un grand merci
    Martin MAGAKIAN

  2. #2
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut
    Dans mes programmes, si j'ai besoin d'une boucle "principale", j'utiliserai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int ma_var = 1;
     
    do
    {
    /* code */
    }
    while(ma_var)
    Maintenant, si c'est pour un décompte (5,4,3,2,1,0->BOUM)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i = 5;
    for (i;i>=0;i--)
    {
    /* code */
    }

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ça n'est pas la question que pose le PO...

    En fait les 2 formes sont identiques.

    Et aucune n'et plus "mieux" que l'autre...

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    For est une boucle dont les contours sont déterminés à l'avance. While dépend de conditions internes.

    Evidemment, ont peut tout faire avec chacune, mais quand tu connais par avance l'ensemble de ce que tu vas traiter(par exemple un tableau dont tu as la taille) For sera plus lisible. Si au contraire la sortie n'est pas anticipable(tu scannes un tableau jusqu'à la première ligne vide), alors While est bien plus efficace.

    mais après, c'est aussi une question d'habitude. Mon père ne mets que des For, quitte à tourner parfois dans le vide, parcequ'il considère que c'est plus lisible. Moi je préfère While, parceque j'ai une meilleure maitrise de mes conditions de sortie.....

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ne raconte pas n'importe quoi stp....

    Les 2 exemples que le PO donne sont pour des boucles INFINIES.


    Et dans ce cas, voir mon post plus haut....

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Par défaut
    OK merci des réponses :-)
    Donc d'après toi "souviron34" au niveau du compilateur c'est la même chose et aucun n'est plus "optimisé" ?

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    non je ne crois pas..

    Le compilateur est assez "intelligent" pour voir qu'il a affaire à une boucle infinie, et par conséquent la code comme il l'entend (qui sera sans doute lamême dans les 2 cas..). Je n'ai pas le temps de sortir le résultat en ASM, mais je suis quais-sûr qu'on verrait le même code avec les 2 manières..

  8. #8
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    Bonjour,
    Les deux exemples sont effectivement identiques, dans les deux cas il s'agit d'une boucle infini, mais si je devais en choisir un, personnellement j'opterai pour while(1) mais c'est uniquement parce que je trouve que ca passe mieux a l'oeil.
    Comme l'a dis souviron34 les deux fonctionnent, aprés chacun a sa préférence .

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par diva_69 Voir le message
    OK merci des réponses :-)
    Donc d'après toi "souviron34" au niveau du compilateur c'est la même chose et aucun n'est plus "optimisé" ?
    diva_69,

    Les développeurs inexpérimentés (on est tous passé par là...) se soucient trop d'optimisation. Si tu fais un traitement dans ta boucle, alors le temps passé à simplement exécuter le code qui gère la boucle sera négligeable. Et si tu ne fais pas de traitement, alors pas la peine de le rendre rapide!

    Pour le début, laisse le compilateur décider à ce niveau de détails ce qui est optimal, et concentre-toi sur les choix d'algorithmes, de structures, etc.

    Bon courage,

    Carl

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par diva_69 Voir le message
    Bonjour,
    J'aurai aimer connaitre la différence entre l'utilisation de for( ; ; ) par rapport a while(true) (ou while(1) selon les langages)

    Un grand merci
    Martin MAGAKIAN
    Ils sont pareils : aussi mauvais l'un que l'autre.

    Écrire ce genre de choses c'est montrer que tu n'as pas conçu correctement ton programme. Il devrait toujours y avoir une condition dans le while (et a fortiori dans le for).

  11. #11
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    Citation Envoyé par Garulfo Voir le message
    Ils sont pareils : aussi mauvais l'un que l'autre.

    Écrire ce genre de choses c'est montrer que tu n'as pas conçu correctement ton programme. Il devrait toujours y avoir une condition dans le while (et a fortiori dans le for).
    cela dépend, pour avoir fait un peu de prog sur micro (pic et atmega) les boucle infinis peuvent être trés utiles... Ce n'est pas parce que toi tu n'en a pas besoin que c'est mauvais.

  12. #12
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 532
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 532
    Par défaut
    Je n'aime pas ce genre de déclaration et je la déconseillerais.
    Je n'aime pas du tout while(1) parce que c'est synonyme de plantages et d'application logicielle qui n'est pas intégre...
    Je sais qu'évidemment dans un while(1) on met une séquence d'échappement, un break mais je ne suis pas trop fana de cela

  13. #13
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Je n'aime pas ce genre de déclaration et je la déconseillerais.
    Je n'aime pas du tout while(1) parce que c'est synonyme de plantages et d'application logicielle qui n'est pas intégre...
    Je sais qu'évidemment dans un while(1) on met une séquence d'échappement, un break mais je ne suis pas trop fana de cela
    petit exemple: va faire un chenillard sur une petite carte a pickit sans faire de boucle infini....
    encore une fois nous sommes dans forum général et non pas spécifique a un language... quand j'ai commencé la prog sur pic (en assembleur au début puis en BASCOM, tous nos prog étais inclus dans une boucle infini.

  14. #14
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Contrairement à mes estimés collègues, je ne vois pas bien en quoi une boucle infinie est révoltante... Il y a un tas de programme qui sont faits pour tourner éternellement sauf condition de sortie exceptionnelle, comme les serveurs, les services de l'OS, etc.

    Ensuite comme l'a dit Souviron les deux formes sont équivalentes, for(;;) attire peut-être un peu plus l'œil, rendant évident le fait qu'il s'agit d'une boucle infinie, raison pour laquelle je l'utilise de préférence (mais c'est très subjectif).

    --
    Jedaï

  15. #15
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 532
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 532
    Par défaut
    Citation Envoyé par nayah Voir le message
    petit exemple: va faire un chenillard sur une petite carte a pickit sans faire de boucle infini....
    .
    Je veux bien mais c'est prendre certaines extrêmités; un chenillard c'est un chenillard et c'est sa seule fonction je regrette.
    Un programme informatique c'est sensé effectuer plusieurs actions différentes, sauvegarder lire des données...bref il faut que l'utilisateur puisse interagir avec.
    Imagines-tu dans un logiciel de compta ou bancaire mettre une boucle infinie ?

  16. #16
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par nayah Voir le message
    cela dépend, pour avoir fait un peu de prog sur micro (pic et atmega) les boucle infinis peuvent être trés utiles... Ce n'est pas parce que toi tu n'en a pas besoin que c'est mauvais.
    Ce n'est pas une question de besoin voyons. Je parle de rendre quelque chose de propre. Je n'ai pas dit que je n'en avais jamais fait. Mais maintenant je remarque combien c'était mauvais.

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/06/2007, 11h16
  2. [Optimisation] Boucles for ou while et mysql_result ?
    Par sorenson dans le forum Langage
    Réponses: 5
    Dernier message: 22/12/2006, 09h55
  3. Réponses: 2
    Dernier message: 19/11/2006, 10h54
  4. [Thread] Thread vs while(true)
    Par plutonium719 dans le forum Concurrence et multi-thread
    Réponses: 7
    Dernier message: 20/09/2006, 10h30
  5. Explications de "while true do"
    Par zazaraignée dans le forum Langage
    Réponses: 17
    Dernier message: 08/12/2005, 21h47

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