• [^] # Re: Saut de ligne avant l'accolade.

    Posté par (site web personnel) . En réponse à la dépêche O.S.T.D.C. une introduction au Développement en équipe. Évalué à 7.

    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
    if(null == monpointeur)
    	fairececi();
    
    alors qu'elles écriraient
    if(null == monpointeur)
    {
    	fairececi();
    	etcela();
    }
    
    Alors que les personnes écrivant
    if(null == monpointeur) {
    	fairececi();
    	etcela();
    }
    
    écrivent plus souvent
    if(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