J'ai lu (il y a déjà un petit moment) un livre intitulé "tout sur le code"
(chez crosoft press...) dont une partie traitait de l'épineux problème des accolades.
A la différence de beaucoup d'autres discution sur le sujet, l'auteur se basait non pas
sur l'espacement, la lisibilité mais sur le sens des blocs créés.
Donc en gros trois manières :
while(1)
{
malloc(1);
fork();
}
Dans ce cas, while et {} ne sont pas sur la même colonne et n'ont donc normalement pas le même sens.
(en fait on se demande même que vienne foutre ses accolades ici, en plus de rajouter des indentations...)
Cette syntaxe est, en tout cas pour moi, assez perturbante et illisible (surtout si on enchaine les niveaux)
while(1)
{
malloc(1);
fork();
}
Dans ce cas le début du bloc est
while(1)
{
et la fin la deuxième accolade.
Le bloc est donc parfaitement lisible
Ce type de construction se rapproche en fait d'un
monbloc
BEGIN
plop
plop
END
et enfin
while(1) {
malloc(1);
fork();
}
Ce cas est à mon sens le plus lisible car on a pas une { qui perturbe. Le bloc est signalé en fait quasiment que par
l'indentation, l'accolade fermante signale bien la fin mais sert pas à grand chose (on se rapproche un peu plus
du style python mais c'est pas encore ça)
Dans ce style on repère bien le début (while(1) {) et la fin du bloc (}) et le bloc est mis en évidence par l'indentation
BEGIN mon bloc
mon
traitement
END
Tant que possible j'utilise cette troisième méthode.
Un commentaire plus haut disait :
ca demande un peu plus de reflexion et de temps pour identifier le marqueur de debut de bloc.
Car dans ton cas, le marqueur de debut est while ou for ou if ou.... Alors que dans l'autre cas, c'est { et c'est tout.
Mais dans les deux cas il faut bien le lire le while, if ou for (car sans cela le bloc ne sert pas à grand chose...
Enfin voilà, il faudrait que je retrouve le passage exact du bouquin, c'était bien expliqué car ne rentrait jamais
dans des considérations "graphiques", de lisibilité mais s'attachait uniquement au sens.
Pour finir sur des considération de style par contre, rien n'empèche de mettre les accolades en fin de ligne et de passer des lignes dans le code. Ce style permet d'écrire aussi aéré que les accolades en début de ligne, l'inverse n'étant pas valable...
ps :
On retrouve souvent chez les personnes écrivant avec les accolades en début de lignes des choses du genre
[^] # Re: Saut de ligne avant l'accolade.
Posté par CrEv (site web personnel) . En réponse à la dépêche O.S.T.D.C. une introduction au Développement en équipe. Évalué à 7.
while(1) { malloc(1); fork(); }Dans ce cas, while et {} ne sont pas sur la même colonne et n'ont donc normalement pas le même sens. (en fait on se demande même que vienne foutre ses accolades ici, en plus de rajouter des indentations...)
Cette syntaxe est, en tout cas pour moi, assez perturbante et illisible (surtout si on enchaine les niveaux)while(1) { malloc(1); fork(); }Dans ce cas le début du bloc estwhile(1) {et la fin la deuxième accolade. Le bloc est donc parfaitement lisible Ce type de construction se rapproche en fait d'un et enfinwhile(1) { malloc(1); fork(); }Ce cas est à mon sens le plus lisible car on a pas une { qui perturbe. Le bloc est signalé en fait quasiment que par l'indentation, l'accolade fermante signale bien la fin mais sert pas à grand chose (on se rapproche un peu plus du style python mais c'est pas encore ça) Dans ce style on repère bien le début (while(1) {) et la fin du bloc (}) et le bloc est mis en évidence par l'indentation Tant que possible j'utilise cette troisième méthode. Un commentaire plus haut disait : Mais dans les deux cas il faut bien le lire le while, if ou for (car sans cela le bloc ne sert pas à grand chose... Enfin voilà, il faudrait que je retrouve le passage exact du bouquin, c'était bien expliqué car ne rentrait jamais dans des considérations "graphiques", de lisibilité mais s'attachait uniquement au sens. Pour finir sur des considération de style par contre, rien n'empèche de mettre les accolades en fin de ligne et de passer des lignes dans le code. Ce style permet d'écrire aussi aéré que les accolades en début de ligne, l'inverse n'étant pas valable... ps : On retrouve souvent chez les personnes écrivant avec les accolades en début de lignes des choses du genre alors qu'elles écriraientif(null == monpointeur) { fairececi(); etcela(); }Alors que les personnes écrivantif(null == monpointeur) { fairececi(); etcela(); }écrivent plus souventif(null == monpointeur) { fairececi(); }(cette dernière syntaxe ayant comme avantage de pouvoir rajouter très facilement "etcela();") Et enfin dans le genre très perturbant à mon avis :for(int i = 0, monautrevar = -1; i < masupercondition; i++, monautrevar++) try { // quelques // lignes // de // code } catch(...) { MessageBox("plop"); }a peluche