Hourra ! La version française est enfin sortie ! Laissez-nous un message svp, si vous voulez nous faire part de vos commentaires ou signaler une erreur.
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

Patrons de conception : Itérateur en Java Patrons de conception : Itérateur en C# Patrons de conception : Itérateur en C++ Patrons de conception : Itérateur en PHP Patrons de conception : Itérateur en Python Patrons de conception : Itérateur en Ruby Patrons de conception : Itérateur en Swift Patrons de conception : Itérateur en TypeScript