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

    Posté par . En réponse au journal To comment or not to comment. That is the question.. Évalué à 4.

    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.

    Je préfère personnellement la boucle for quitte à la mettre sur 3 lignes (je ne touche pas aux noms, ni n'ajoute de typedef, mais je le fais presque systématiquement) :

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

    L'avantage c'est qu'on voit qu'il s'agit d'une itération complète. On sait qu'il s'agit d'un foreach, ça ne laisse pas de place à l'imagination.

    Après faut être un peu réaliste et plutôt utiliser les outils standards qui sont à disposition :

    for_each( myIntVector.cbegin(), myIntVector.cend(), bla_bla);
    
    

    ou

    for (int &myIntVectorIterator : myIntVector) {
     // bla bla
    }
    
    

    On gagne énormément sans toucher aux identifiants. C'est quand l'itération n'est pas complète que la question peut se poser. Comme ça par exemple :

    auto myIntVectorIterator = myIntVector.begin();
    while(myIntVectorIterator != myIntVector.end()
     && *myIntVectorIterator < N) {
     // bla bla
     ++myIntVectorIterator;
    }
    
    

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)