Foreach est une forme d'itérateur, mais c'est un peu moins générique malgré tout. Le problème, c'est qu'en utilisant un mot clé au lieu d'une méthode d'instance, on fixe une fois pour toutes le comportement de l'itérateur: il est censé énumérer les éléments d'un contenant, dans un ordre prédéfini (par l'objet contenant).
Il y a des tonnes d'autres manières d'imaginer une itération:
- on peut vouloir parcourir les éléments dans un autre ordre que celui "intuitif"
- sur une table de hachage, on peut vouloir parcourir les clés ou les valeurs
- on peut vouloir parcourir un arbre ou un graphe de plusieurs manières (profondeur, largeur...)
- on peut vouloir parcourir un graphe en spécifiant de quel sommet on part
- on peut vouloir faire autre chose qu'exécuter du code sur chaque élément, par exemple construire un tableau contenant les résultats de chaque visite d'un élément. Ça oblige, soit à faire du code pas très beau, soit à ajouter un mot clé "map" au langage, qui souffrira des mêmes limitations que foreach sur l'ordre du parcours.
[^] # Re: Célèbre ?
Posté par Yusei (Mastodon) . En réponse à la dépêche Sortie de Ruby on Rails 2.0. Évalué à 4.
Il y a des tonnes d'autres manières d'imaginer une itération:
- on peut vouloir parcourir les éléments dans un autre ordre que celui "intuitif"
- sur une table de hachage, on peut vouloir parcourir les clés ou les valeurs
- on peut vouloir parcourir un arbre ou un graphe de plusieurs manières (profondeur, largeur...)
- on peut vouloir parcourir un graphe en spécifiant de quel sommet on part
- on peut vouloir faire autre chose qu'exécuter du code sur chaque élément, par exemple construire un tableau contenant les résultats de chaque visite d'un élément. Ça oblige, soit à faire du code pas très beau, soit à ajouter un mot clé "map" au langage, qui souffrira des mêmes limitations que foreach sur l'ordre du parcours.