Summer SALE
Itérateur

Itérateur en Go

L’Itérateur est un patron de conception comportemental qui permet de parcourir une structure de données complexe de façon séquentielle sans exposer ses détails internes.

Grâce à l’itérateur, les clients peuvent parcourir les éléments de différentes collections de la même manière en utilisant une seule interface.

Exemple conceptuel

Le but du patron de conception itérateur est d’extraire la logique d’itération d’une collection et de la mettre dans un autre objet que l’on appelle un itérateur. Cet itérateur fournit une méthode générique pour parcourir une collection indépendamment de son type.

collection.go: Collection

package main type Collection interface {	createIterator() Iterator } 

userCollection.go: Collection concrète

package main type UserCollection struct {	users []*User } func (u *UserCollection) createIterator() Iterator {	return &UserIterator{	users: u.users,	} } 

iterator.go: Itérateur

package main type Iterator interface {	hasNext() bool	getNext() *User } 

userIterator.go: Itérateur concret

package main type UserIterator struct {	index int	users []*User } func (u *UserIterator) hasNext() bool {	if u.index < len(u.users) {	return true	}	return false } func (u *UserIterator) getNext() *User {	if u.hasNext() {	user := u.users[u.index]	u.index++	return user	}	return nil } 

user.go: Code client

package main type User struct {	name string	age int } 

main.go: Code client

package main import "fmt" func main() {	user1 := &User{	name: "a",	age: 30,	}	user2 := &User{	name: "b",	age: 20,	}	userCollection := &UserCollection{	users: []*User{user1, user2},	}	iterator := userCollection.createIterator()	for iterator.hasNext() {	user := iterator.getNext()	fmt.Printf("User is %+v\n", user)	} } 

output.txt: Résultat de l’exécution

User is &{name:a age:30} User is &{name:b age:20} 

Itérateur dans les autres langues

Itérateur en C# Itérateur en C++ Itérateur en Java Itérateur en PHP Itérateur en Python Itérateur en Ruby Itérateur en Rust Itérateur en Swift Itérateur en TypeScript