Méthode forEach
Parcourez chaque élément de vos collections de manière simple et intuitive, sans avoir à gérer les index ou les conditions de boucle.
En Swift, la méthode forEach est une alternative à la boucle for-in qui permet d'itérer sur chaque élément d'une collection comme un tableau, un ensemble ou un dictionnaire. La méthode forEach est souvent utilisée pour écrire du code plus concis et pour intégrer des éléments fonctionnels dans votre code.
Syntaxe de forEach
La méthode forEach prend une closure (ou une fonction anonyme) comme argument, et cette closure est appelée une fois pour chaque élément de la collection.
collection.forEach { item in
// Code à exécuter pour chaque item
}
collection: La collection que vous souhaitez parcourir (tableau, dictionnaire, ensemble, etc.).item: Représente chaque élément de la collection lors de chaque itération.
Utilisation avec un Tableau
let fruits = ["Pomme", "Banane", "Cerise"]
fruits.forEach { fruit in
print(fruit)
}
// Affiche :
// Pomme
// Banane
// Cerise
Dans cet exemple, chaque élément du tableau fruits est passé dans la closure, où il est imprimé.
Utilisation avec un Ensemble
Les ensembles (sets) n'ont pas d'ordre particulier, mais forEach peut être utilisé pour itérer sur tous les éléments d'un ensemble.
let numbers: Set = [1, 2, 3, 4, 5]
numbers.forEach { number in
print(number)
}
// Affiche les nombres dans un ordre indéfini, par exemple :
// 1
// 2
// 3
// 4
// 5
Utilisation avec un Dictionnaire
Lors de l'utilisation de forEach avec un dictionnaire, vous recevez un tuple (clé, valeur) pour chaque entrée.
let ages = ["Alice": 30, "Bob": 25, "Charlie": 35]
ages.forEach { (name, age) in
print("\(name) a \(age) ans")
}
// Affiche :
// Alice a 30 ans
// Bob a 25 ans
// Charlie a 35 ans
Différences entre forEach et for-in
- Style Fonctionnel :
forEachest plus orienté fonctionnel, ce qui le rend souvent plus concis et peut s'intégrer plus naturellement dans du code qui utilise d'autres concepts de programmation fonctionnelle comme les fermetures (closures) et les méthodes de transformation (map,filter, etc.). - Impossibilité d'utiliser
breakoucontinue: Contrairement à la bouclefor-in, vous ne pouvez pas utiliser les instructionsbreakoucontinuedans une boucleforEach. Si vous avez besoin de sortir prématurément de la boucle ou de passer à l'itération suivante,forEachn'est pas la bonne méthode à utiliser.
let numbers = [1, 2, 3, 4, 5]
for number in numbers {
if number == 3 {
break
}
print(number)
}
// Affiche :
// 1
// 2
Le même code avec forEach entraînerait une erreur si vous essayez d'utiliser break ou continue :
numbers.forEach { number in
if number == 3 {
// break // Erreur : 'break' n'est pas permis dans une closure
}
print(number)
}
Exemples Avancés
Utilisation avec une Closure Inline
Vous pouvez simplifier encore plus votre code en utilisant une closure inline si le code exécuté pour chaque élément est court.
let numbers = [1, 2, 3, 4, 5]
numbers.forEach { print($0) }
// Affiche :
// 1
// 2
// 3
// 4
// 5
$0: Représente le premier argument de la closure. Dans le cas deforEach, il s'agit de l'élément de la collection.
Utilisation avec une Fonction Externe
Vous pouvez également passer une fonction existante à forEach.
func printElement(_ element: Int) {
print("Élément : \(element)")
}
let numbers = [10, 20, 30]
numbers.forEach(printElement)
// Affiche :
// Élément : 10
// Élément : 20
// Élément : 30
Quand Utiliser forEach ?
- Code Concis et Lisible :
forEachest particulièrement utile lorsque vous souhaitez écrire des boucles courtes et directes, où le focus est sur l'exécution d'une tâche simple pour chaque élément d'une collection. - Programmation Fonctionnelle : Si vous utilisez un style de programmation fonctionnelle dans votre code Swift,
forEachs'intègre bien avec d'autres méthodes de transformation de collections. - Absence de Besoin de Contrôle de Flux : Si vous n'avez pas besoin de sauter des itérations (
continue) ou de sortir de la boucle prématurément (break),forEachest une bonne option.