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);
Partager