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.
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.
Pas de soucis pour utiliser "continue" ou "break".
Par contre "goto"...
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.
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:
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
- la facilit� de relecture de code
- la simplicit� de programmation et de mise en oeuvre
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
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...
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.
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.
il y a quand m�me quelques tr�s mauvais cas d'utilisations
qui est un vilain goto ecrit de mani�re un peu pompeuse. (break peut aussi etre remplac� par continue)
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);
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...
avoir un "do while" qui ne boucle pas c'est m�chamment difficile a relire.
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...
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 :
Que ce language permet de faire des troupeaux de pinguouin anonymes.* 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 !
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.Ce message etait sponsoris� par la soci�t� des informaticiens trolls
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)
ou pas ??? (j'ai toujours pas compris l'int�r�t mais bon)
http://www.developpez.net/forums/d35...pp/define-gcc/
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...
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)
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.
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...
oO... Sa fait pas gras :')ou je n'ai pas a m'interfacer avec des fonctions pouvant en lever.
Partager