En plus de la boucle for traditionnelle héritée du langage C, Swift ajoute une boucle for-in qui facilite les itérations sur des tableaux, des dictionnaires, des plages, des chaînes et bien d’autres séquences. La boucle for-in exécute un ensemble d’actions pour chaque élément dans une séquence. En ce qui concerne la boucle for, elle exécute un ensemble d’actions jusqu’à ce qu’une condition spécifique soit remplie, typiquement par incrémentation d’un compteur à chaque fois que la boucle se termine.
Exemples d’utilisations de for et for-in pour afficher les cinq premières entrées d’une table de multiplication par 5 :
Avec la boucle for-in
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | for index in 1...5 { print("\(index) times 5 is \(index * 5)") } // 1 times 5 is 5 // 2 times 5 is 10 // 3 times 5 is 15 // 4 times 5 is 20 // 5 times 5 is 25 |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | for var index = 1; index < 6; ++index { print("\(index) times 5 is \(index * 5)") } // 1 times 5 is 5 // 2 times 5 is 10 // 3 times 5 is 15 // 4 times 5 is 20 // 5 times 5 is 25 |
Après avoir examiné la requête du 7 au 10 décembre, l’équipe d’examinateurs a accepté la requête et décidé de supprimer les boucles for dans la version 3.0 de Swift. En ce qui concerne la version 2.2 en cours de développement, il y sera introduit un avertissement pour indiquer aux utilisateurs que les boucles de style C seront supprimées, avant que la mesure soit effectivement appliquée dans Swift 3.0.
Le comité d’analyse s’accorde sur le fait que les boucles for de style C sont assez rares dans le code Swift et qu’en plus, la plupart des utilisations existantes pourraient être mieux écrites en boucles for-in. Toutefois, il reconnaît qu’il y a des domaines en particulier où le retrait des boucles for de style C pourrait causer des problèmes.
D’abord, il existe des situations où les boucles sont difficiles à exprimer clairement avec for-in. C’est le cas notamment des décomptes. Pour corriger ce problème, la solution envisagée consiste à apporter des améliorations dans la bibliothèque Standard.
Un autre problème que pourrait causer la suppression des boucles for est qu’il existe encore des utilisations avancées de ces boucles qui sont difficiles à exprimer autrement. Le comité d’examen estime ici que ces utilisations plus avancées ne sont pas assez fréquentes pour justifier le maintien des boucles for de style C dans le langage.
Le dernier problème est que la performance de la boucle for-in est à la traîne par rapport à celle des boucles for de style C dans certains cas. L’amélioration de l’optimiseur a été trouvée comme une solution pour combler cet écart de performance. Le comité d’examen estime par ailleurs que les boucles while sont aussi une solution acceptable pour les codes à performance critique où l’optimiseur ne parvient pas à éliminer les abstractions utilisées dans la boucle for-in.
Sources : Swift-evolution-announce mailing list, GitHub
Et vous ?
Que pensez-vous de la suppression des boucles for de style C dans Swift ?
Les solutions proposées peuvent-elles combler la suppression de ces boucles ?
Voir aussi
Swift est maintenant open source, le code source du langage de programmation d’Apple est disponible sur GitHub