Depuis C++ 17, il y a moyen de nommer les données que l'on récupère "par lot", car il ne faut pas oublier que "nommer, c'est créer", et que si on appelle explicitement une donnée
key (ou
cle) et que l'on appelle explicitement l'autre donnée
value (ou
valeur), l'usage auquel les deux données vont servir sera beaucoup plus clair pour tout le monde que si on se contentait de
iterator->first et
iterator->second et que, du coup, le code devient beaucoup plus facile à comprendre
On pourra donc profiter "intelligemment" de l'inférence de type et des boucles basées sur les intervalles en écrivant un code proche de
1 2 3 4 5 6 7
| for(auto [key, value] : // je récupère une donnée qui sert de clé et une donnée qui sert de valeur
collection /* dans la collection nommée collection */ ){
/* j'utilise key pour accéder (en lecture seule) à la valeur de la clé
* j'utilise value pour accéder (en lecture écriture au besoin) à la donnée qui représente la valeur
* je parcours l'ensemble des éléments qui se trouvent dans collection
*/
} |
Avec un tel code code, aussi longtemps que les fonctions utilisées (begin() et end(), dans le cas présent) renverront effectivement une clé et une valeur, mon code pourra effectivement fonctionner sans modification.
Et si, un jour, je décide de changer le type de la collection qui contient les éléments que je souhaite parcourir, et que la notion de clé n'a "plus de raison d'être" -- à l'occasion d'un refactoring majeur -- je sais exactement comment je devrai modifier le code en question

Partager