• [^] # Re: Code auto-documenté

    Posté par (site web personnel) . En réponse au journal To comment or not to comment. That is the question.. Évalué à 2.

    Je répond en deux fois, une fois rapide sur quelques points et je ferai plus long plus tard (taff, toussa)

    Pour reprendre ton exemple :

    for(myIntVectorIterator = myIntVector.begin(); myIntVectorIterator != myIntVector.end(); myIntVectorIterator++) if (*myIntVectorIterator % 2) {
     cout<<*myIntVectorIterator<<" ";
     //Should output 1 3 5
    }
    

    Ce code ne passe pas selon mes règles. C'est un exemple, très abstrait, je ne peux donc pas proposer de solution, mais face à un code de ce genre, je réfléchis énormément pour raccourcir la ligne de 144 caractères. Je suppose que je mettrais justement le if/else dans une autre fonction, avec un nom qui indique ce que fait cette condition. myIntVectorIterator est un nom très long, est-ce qu'il n'y en a pas un plus court qui ait un sens dans le contexte actuel ?…

    En fait le premier problème de ce code est justement le fait d'aller à la ligne (le if sur la ligne du for)

    Ensuite, pour le rendre par certains côtés plus lisible, il faut "juste" comprendre ce qu'est un for :

    vector<int>::iterator myIntVectorIterator = myIntVecor.begin();
    while(myIntVectorIterator != myIntVector.end()) {
     // bla bla
     myIntVectorIterator++;
    }
    
    

    Et d'ailleurs il devient plus aisé de remplacer le corps du for par une méthode. L'inconvénient (enfin si le corps du for est trop long) est qu'on voit moins vite l'itération, même si on s'en doute fortement.

    Pour l'histoire des accolades : arrive-t-on réellement a un code où il n'y a jamais deux instructions dans un if/else/autre ? Si oui, alors il peut être envisageable de se passer d'accolades. Mais ça + une largeur de ligne faible, ça me semble étrange. Mais peut-être est-ce possible, auquel cas c'est intéressant ;)

    (la suite un peu plus tard)