J'apprends les modèles de conception et j'ai trouvé Itérateur. Avons-nous encore besoin de l'utiliser? P>
Depuis que nous avons la collecte, je suis confus pourquoi nous avons toujours besoin du modèle de conception itérateur. p>
9 Réponses :
Les collections utilisent activement des itérateurs, dans les deux langues. Chaque fois que vous parcourez les éléments d'une collection, il y a une sorte d'itérateur impliqué, même si vous ne le voyez pas explicitement dans le code. Je donne des exemples en Java, comme je le connais plus.
L'idiome préféré à itérer sur une collection avant Java 5 - à l'aide d'un Et depuis Java 5: P> itérateur code> explicitement: p> for (Element e : elements) {
doSomething(e);
}
L'interface EM> str forte> est exactement le motif itérateur :) p>
Non, cela crée des itérateurs, mais ce n'est pas un itérateur lui-même
Donc, je n'ai pas besoin d'apprendre trop sur le modèle d'itérateur car il est prêt pour moi !!! à droite ?
@Kevin: Il n'y a pas grand chose à apprendre. C'est un modèle simple :)
Les collections Java et C # utilisent le motif itérateur sous la hotte. C'est presque une nécessité pour des collections mutables. P>
Si vous choisissez plutôt d'utiliser les collections persistantes (par exemple, celles fournies dans la bibliothèque Java fonctionnelle), vous n'auriez plus besoin du motif itérateur. P>
Pourquoi ne voudriez-vous pas pouvoir itérer une collection persistante?
@Peter: Vous ne seriez généralement pas, grâce aux fonctions d'ordre supérieur pour opérer sur des collections. Même si vous voulez itérer sur une collection, vous pouvez toujours le faire via la récursion et la déstructuration de la liste. Vous n'avez pas besoin de modèle d'itérateur pour cela.
en Java, un itérateur a d'autres utilisations, en particulier l'itérateur.ReMove () peut encore être utile. P>
C'est au cœur de Linq-Opous qui est l'une des caractéristiques essentielles de C # 3. Les Itérateurs sont donc très importants dans le C # moderne. P>
C # 3 a également introduit une fonction de langue spéciale vous permettant d'implémenter facilement un itérateur à l'aide de la syntaxe code> Syntaxe. P>
ienumerator iEnumerable ienumerable foreach code> est également basé sur les itérateurs. p>
+1 Pour mentionner «Rendement Retour» une de ces caractéristiques curieuses mais magnifiques de la langue C #.
Itérateur et collection sont différents dans une collection essentiellement des éléments de maintien, et un itérateur ne récupère que des articles un par un, non contenus à l'intérieur. P>
Par exemple, un idatatreader est un itérateur aux éléments de base de données, et vous pouvez avoir un itérateur itératif itératif itérateur aux entrées d'annuaire d'un système de fichiers, ainsi qu'un itérateur à une collection. P>
Oui, nous avons toujours besoin d'itérateurs!
1) La boucle via des listes liées est o (n ^ 2) code> à temps sans itérateurs. P> for (int i = 0; i < list.size(); i++)
list.get(i).foo();
Dans de nombreux cas, il est plus efficace de itérer sur un nombre inconnu d'articles au lieu de les collecter tous dans une collection. Voici plusieurs exemples qui montrent, pourquoi itérant est plus efficace. Dans certains cas, il n'est même pas possible d'utiliser des collections. P>
i code>. li>.
- Après avoir obtenu une liste de source, un nouveau résultat doit être créé, en fonction de cette liste. Par exemple, une liste source doit être filtrée et convertie. Il ne serait pas efficace de sauvegarder le résultat dans une nouvelle liste, alors que seules certaines des valeurs seraient réutilisées. LI>
ul>
Le dernier exemple se referve à des approches LINQ ou SIMILIAR, où des structures d'objet complexes peuvent être transformées efficacement.
De plus, il est principalement plus compliqué d'utiliser un pour code> en boucle pour gérer tous les éléments au lieu d'utiliser foreach code>. P>
Collections encapsulez différents types d'organisations pour un groupe de valeurs - comme dans un ensemble, des tableaux de liste et tels. p>
Qu'est-ce que les itérateurs encapsulent / représentent sont ceux-ci - p>
Même si j'ai une liste de chaînes, ma liste interne La mise en œuvre utiliserait un objet contenant la valeur de chaîne avec les prochains articles précédents. Itérateur cache ces internes objets qui auraient pu être exposés autrement. p>
Selon le type de l'objet réel qui représente la Itérateur itération à travers eux pourrait être très différent. par exemple sur un Array Vous iriez à l'index suivant. Mais la liste de l'ona dont vous auriez besoin Pour accéder aux références d'éléments suivantes ou précédentes. P>
opérations courantes comme les premiers articles et prochains éléments. P> li>
Informations supplémentaires telles que des traits d'itérateur qui vous permettent de connaître le type de mouvements supportés à l'aide de l'itérateur p> li> ol>
Donc, au lieu d'avoir une coutume pour la boucle pour le vecteur et une autre boucle personnalisée pour accéder à l'élément des cartes et une autre boucle personnalisée pour accéder à la collecte d'une liste, nous pouvons maintenant avoir une boucle d'accès unique pouvant être appliquée à l'un des ces types. p>
En fait, c'est ce qui rend les algorithmes basés sur des modèles possibles car ils n'ont maintenant besoin que de se concentrer sur ce qu'ils font avec le contenu ou les collections et ignorent le type de collections qui leur sont transmises. P>
J'irais jusqu'à dire que le motif d'itérateur est l'élément le plus simple et de base à partir duquel tout le concept de collections de modèle comme STL commence. P>