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

C++ Discussion :

Le mot cl� continue en C++


Sujet :

C++

  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut Le mot cl� continue en C++
    Bonjour

    En terme de bonnes pratiques, est ce que c'est mal d'utiliser le mot cl� continue dans un code c++ ? J'ai un cas ou �a me permettrait de bien r�duire la complexit� cyclomatique, qui rend vite le code illisible dans certains cas.

  2. #2
    Membre �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par d�faut
    Pas de soucis pour utiliser "continue" ou "break".
    Par contre "goto"...

  3. #3
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Avant de l'utiliser, j'aurais tendance � regarder � deux fois si un refactoring ne me permettrait pas de l'�viter (par exemple, en mettant le corps de la boucle dans une fonction) de mani�re agr�able, sinon, je n'aurais pas plus d'�tats d'�me que �a � le faire.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  4. #4
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Ce n'est qu'un ressenti personnel, et donc fatalement sujet � d�bat, mais, pour ma part, je suis tout relativement tout aussi allergique � l'utilisation de continue qu'� celle de break lorsque je ne suis pas dans une structure logique switch ... case.

    Maintenant, je vais m'empresser d'ajouter une pr�cision, avant que certains ne se mettent � crier "au scandale"

    Je n'aime pas l'instruction continue, pas plus que je n'aime break en dehors des switch...case ou l'instruction goto.

    Cela ne veut absolument pas dire que je veuille en arriver � en interdire l'utilisation . J'ai beau �tre (actuellement ) responsable de rubrique, qui serais-je pour essayer d'imposer cette vision des choses

    G�n�ralement, ma politique tient principalement sur deux aspects:
    1. la facilit� de relecture de code
    2. la simplicit� de programmation et de mise en oeuvre
    S'il est possible (et "seulement si") d'assurer la facilit� de relecture du code en s'en passant sans pour autant nuire � la facilit� de mise en oeuvre et de programmation, alors, le choix est fait: j'�vite les continue

    S'il devient trop difficile d'assurer la simplicit� de mise en oeuvre et de programmation en s'en passant, et que le code reste, malgr� tout "suffisamment" (c'est un curseur � placer... o� bon te semble ) facile � relire, il semble opportun de faire "contre mauvaise fortune, bon coeur" et d'accepter de d�roger � la r�gle "g�n�rale" qui conseille de les �viter.

    Ceci dit, il est *peut-�tre* �galement int�ressant de se poser la question de savoir si ta fonction n'en fait pas un peu trop, et d'envisager de la factoriser de mani�re plus efficace, ce qui *pourrait peut-�tre* te permettre d'�viter un recours trop intense � continue, en plus de te faciliter la t�che en terme de recherche d'erreurs.

    Je suis d�sol� de donner une r�ponse aussi "g�n�rique" � ta question, mais il me semble impossible d'�tre plus pr�cis, chaque situation devant �tre �valu�e individuellement

    hope it helps

    [EDIT]Grill�... ca m'apprendra � vouloir faire des discours
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  5. #5
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    J'ai la m�me r�action que Loic.

    Car, continue et break, c'est comme return, c'est une vieille histoire de SESE (Single Entry, Single Exit) que l'on se traine dans l'inconscient collectif depuis le C.

    Le SESE, cela sert d'abord � assurer une lib�ration d�terministe de ressources. Hors, pour cela, le C++ dispose du RAII (� contrario du C, du Pascal et autres langages pr�-exceptions).

    Certains estiment que le SESE est n�cessaire � rendre une fonction compr�hensible. Foutaises! Si la fonction n'est pas compr�hensible � cause d'une malheureuse interruption, c'est qu'elle est trop complexe. Qu'on la refactorise d'abord pour en extraire autant de parties que n�cessaire (cf ce qu'� dit Loic). Pour une bonne compr�hension et une bonne maintenabilit�, c'est �a qui est important.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    Et bien merci pour ces r�ponses d�taill�es !

    Ho ce n'est pas tant qu'elle n'est pas compr�hensible, mais �a rajoute des tas de ifs qui s'imbriquent les uns les autres et �a fera une mauvaise note de mon code au check cyclomatique ^^

    Non ce n'est pas indispensable, et d'ailleurs je vais m'en passer, mais la question m'int�ressait au del� m�me de mon bout de code.

  7. #7
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par jblecanard Voir le message
    Ho ce n'est pas tant qu'elle n'est pas compr�hensible, mais �a rajoute des tas de ifs qui s'imbriquent les uns les autres et �a fera une mauvaise note de mon code au check cyclomatique ^^
    Dans ce cas l�, r��crit le code, ne laisse pas ces ifs. Tu peux donner une id�e de ce � quoi il ressemble, qu'on puisse �tre plus pr�cis ?
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  8. #8
    screetch
    Invit�(e)
    Par d�faut
    il y a quand m�me quelques tr�s mauvais cas d'utilisations

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    do
    {
      if(blablabla) break;
      /* plein de trucs */
      if(dobidouwa) break;
      /* plein de trucs */
    } while(0);
    qui est un vilain goto ecrit de mani�re un peu pompeuse. (break peut aussi etre remplac� par continue)

  9. #9
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Ce qui est vilain, c'est /* plein de trucs */

    Et contrairement � goto, on ne peut aller qu'� un seul endroit. Nous sommes loin de l'article "goto considered harmful" qui date d'une �poque o� il y pouvait y avoir des entrecroisements de spaghettis.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  10. #10
    screetch
    Invit�(e)
    Par d�faut
    avoir un "do while" qui ne boucle pas c'est m�chamment difficile a relire.

  11. #11
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    OK. J'avais manqu� le 0. Des fois des gens ont des id�es bizarres.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    D�tails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Par d�faut
    Roh mais arreter ce d�lit de facies avec le goto c'est bien !
    C'est meme tellement bien que certains ont invent� le goto++ !
    http://www.gotopp.org/presentation.html.fr

    Au passage on peut admirer ses caract�ristiques :
    * C'est le meilleur langage de programmation au monde.
    * Et m�me mieux, c'est le meilleur langage de programmation de l'univers.
    * Il a une syntaxe claire et accessible.
    * La possibilit� de faire des GOTO.
    * Manipulation des r�f�rences (�quivalent des pointeurs) pour faire plus de bugs.
    * Multit�che tr�s simple : on utilise un GOTOUNIVERSPARALLELEouizzz � la place d'un GOTO normal et le flux d'ex�cution du programme se s�pare en deux.
    * Objet : h�ritage, propri�t�s et m�thodes partag�es, acc�s aux membres par indice...
    * Modulaire : gr�ce � une interface tr�s simple, il est possible de programmer des modules en C++. Le GOTO++ propose entre autres un module r�seau tr�s facile � utiliser (en combinaison avec les caract�ristiques multit�ches du langage).
    * Expressions r�guli�res.
    * Tableaux, tables de hachage...
    * Des GOTO ! Plein de GOTO !
    * Et bien d'autres choses !
    Que ce language permet de faire des troupeaux de pinguouin anonymes.
    De faire la merveilleuse commande gotochezpasou (oui oui un goto a atterrissage random si c'est pas merveilleux !)

    Non bref le goto c'est bien mangez en !


    Allez j'en remet une couche :
    Le GOTO++ (ce fabuleux langage) est le fruit d'un travail consid�rable de r�flexions profondes sur le sens de la vie, la nature du monde qui nous entoure, l'utilit� des col�opt�res � pattes articul�es dans notre �cosyst�me et moultes choses non moins importantes. Cependant, son �laboration a �t� avant tout motiv�e par la n�cessit� de compter les suicides de pingouins dans les regions m�ridionales de l'Antarctique sauvage. Pour parler plus concr�tement, le GOTO++ est bas� sur des r�gles non conventionelles. Il n'y a pas d'op�rations logiques en GOTO++, bien qu'on puisse s'y ramener par des artifices complexes. L'instruction de base est le GOTO, qui ne fait absolument rien. Ensuite vient le GOTOGOTO qui permet de se rendre en un autre point du programme (un goto classique me direz-vous). Toutefois, le GOTOGOTO requiert, en plus du label, un pourcentage de r�ussite qui va permettre de calculer la probabilit� pour que le GOTOGOTO vous envoie vraiment � cette �tiquette. L�, normalement, votre esprit vient de s'illuminer, vous avez atteint la lib�ration du cycle du samsara et vous r�alisez avec enthousiasme les innombrables possibilit�s qui sont d�sormais � votre disposition. Alors n'h�sitez plus, rejoignez les millions de programmeurs qui ont d�j� choisi le GOTO++ comme langage de pr�dilection !

    Voici, en guise d'exemple, le fameux � Hello World! � �crit en GOTO++. Notez l'�l�gance du code et le fait que notre boucle n'est pas infinie mais se r�p�te un nombre al�atoire de fois.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    §1
    GOTOPRINTDUTEXTE() ; «Hello World !»
    GOTO qui sert a rien
    GOTOGOTO() *(1)
    Ce message etait sponsoris� par la soci�t� des informaticiens trolls

  13. #13
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    Citation Envoy� par Luc Hermitte Voir le message
    OK. J'avais manqu� le 0. Des fois des gens ont des id�es bizarres.
    ou pas ??? (j'ai toujours pas compris l'int�r�t mais bon)
    http://www.developpez.net/forums/d35...pp/define-gcc/

  14. #14
    screetch
    Invit�(e)
    Par d�faut
    Citation Envoy� par Luc Hermitte Voir le message
    OK. J'avais manqu� le 0. Des fois des gens ont des id�es bizarres.
    ah oui effectivement il saute pas forc�ment aux yeux
    mais on est bien d'accord, des fois les gens......

  15. #15
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Citation Envoy� par yan Voir le message
    ou pas ??? (j'ai toujours pas compris l'int�r�t mais bon)
    http://www.developpez.net/forums/d35...pp/define-gcc/
    Ici c'est une macro.
    Potentiellement multi-instructions, ou aussi une macro qui oblige � mettre des ';' derri�re histoire de ne pas perturber l'indentation automatique.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  16. #16
    Membre �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par d�faut
    Le "try" est un magnifique goto. En fait c'est un goto qui ne se dit pas, mais il peut avoir lieu n'importe o�, n'importe quand. Il suffit d'�pousseter quelques labels (pardon, des catch) �a et l� pour avoir, peut-�tre, une chance de constater qu'un goto a fait son oeuvre quelque part.

  17. #17
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    Citation Envoy� par camboui Voir le message
    Le "try" est un magnifique goto. En fait c'est un goto qui ne se dit pas, mais il peut avoir lieu n'importe o�, n'importe quand. Il suffit d'�pousseter quelques labels (pardon, des catch) �a et l� pour avoir, peut-�tre, une chance de constater qu'un goto a fait son oeuvre quelque part.
    Il y a certe interruption du flux normal mais soit tu attrapes l' exception ici et tu la traites soit tu remontes la pile d'appel pour tenter de trouver un bloc qui peut la traiter..
    On ne peut pas parler de goto (qui lui envoie potentiellement n'importe o� dans la port�e courante).
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  18. #18
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49

    Informations professionnelles :
    Activit� : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par d�faut
    Citation Envoy� par camboui Voir le message
    Le "try" est un magnifique goto. En fait c'est un goto qui ne se dit pas, mais il peut avoir lieu n'importe o�, n'importe quand. Il suffit d'�pousseter quelques labels (pardon, des catch) �a et l� pour avoir, peut-�tre, une chance de constater qu'un goto a fait son oeuvre quelque part.

    personnellement je ne suis pas fan de la programmation par exception mais je pense qu'il s'agit d'une autre d�bat. les goto et continue j'arrive aussi a m'en passer.

    Je n'utilise les try/catch que lorsque cela s'av�re n�cessaire c'est � dire pour g�rer des cas exceptionnel comme par exemple l'appel de fonctions externe bas niveau non maitris�es (dans le sens boite noire) et qui peuvent en lancer par exemple.

    dans l'absolu j'arrive toujours a me passer des exception des l'instant ou je n'ai pas a m'interfacer avec des fonctions pouvant en lever.

  19. #19
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Tu es en train de nous dire que tu n'utilises (en C++) jamais des choses comme new, ou les conteneurs standards.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  20. #20
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par d�faut
    ou je n'ai pas a m'interfacer avec des fonctions pouvant en lever.
    oO... Sa fait pas gras :')

Discussions similaires

  1. Extraction de mots cl�s
    Par Olive1808 dans le forum Algorithmes et structures de donn�es
    R�ponses: 6
    Dernier message: 01/02/2016, 20h49
  2. [VB6] attendre un événement pour continuer l'exécution
    Par Argonz dans le forum VB 6 et ant�rieur
    R�ponses: 21
    Dernier message: 12/11/2002, 13h08
  3. [langage] Continuer a parser une ligne
    Par D[r]eadLock dans le forum Langage
    R�ponses: 5
    Dernier message: 30/09/2002, 18h49
  4. Au sujet des mots de passe
    Par FranT dans le forum Langage
    R�ponses: 6
    Dernier message: 17/09/2002, 22h16
  5. [langage] Reconnaissance de mots
    Par Flo. dans le forum Langage
    R�ponses: 2
    Dernier message: 10/08/2002, 23h34

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