Mis à jour le vendredi 27 janvier 2017
  • 15 heures
  • Facile

Ce cours est visible gratuitement en ligne.

Ce cours existe en livre papier.

Ce cours existe en eBook.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Les boucles

Connectez-vous ou inscrivez-vous pour bénéficier de toutes les fonctionnalités de ce cours !

Les boucles ! Encore une notion incontournable dans un langage de programmation.

Dans un programme, il vous arrivera souvent de vouloir répéter une (ou plusieurs) action(s) plusieurs fois. Vous pourriez écrire plusieurs fois cette action, mais imaginez que vous voulez la répéter 1 000 fois ? Ça fait beaucoup à écrire et ça devient vite embêtant, même très embêtant ! C'est pourquoi la notion de boucle a été inventée.

Ne vous inquiétez pas, ça reste une notion toute simple à apprendre, et vous devriez avoir moins de choses à apprendre et comprendre que les deux chapitres précédents.

Qu'est-ce qu'une boucle ?

Pour vous expliquer ce que c'est une boucle et illustrer l'introduction de ce chapitre, je vais poser un problème tout simple. Pour cela, je vais prendre l'exemple donné lorsque j'ai appris la programmation. Imaginons que vous voulez écrire votre punition dans la console en Swift. Comment vous y prendriez-vous avec ce que vous avez appris auparavant ? Logiquement comme ceci :

print("Je dois apprendre mes leçons en cours de Swift.")
print("Je dois apprendre mes leçons en cours de Swift.")
print("Je dois apprendre mes leçons en cours de Swift.")
print("Je dois apprendre mes leçons en cours de Swift.")
print("Je dois apprendre mes leçons en cours de Swift.")
print("Je dois apprendre mes leçons en cours de Swift.")
print("Je dois apprendre mes leçons en cours de Swift.")
print("Je dois apprendre mes leçons en cours de Swift.")
print("Je dois apprendre mes leçons en cours de Swift.")
print("Je dois apprendre mes leçons en cours de Swift.")

Bon, là je l'accorde, c'est pas non plus l'impossible qui est demandé. Vous n'avez que 10 lignes à copier. Vous avez surtout beaucoup de chances d'avoir une aussi petite punition ! :lol:
Mais je vais être plus méchant ! Je vais passer de 10 lignes à 1 000 lignes à copier. Là je pense que ça devient plus embêtant d'écrire ces 1 000 lignes dans votre code.

C'est pourquoi les boucles ont été inventées ! Une boucle vous permettra de répéter une ou plusieurs instructions en même temps.

Comment fonctionne une boucle ?

Le fonctionnement d'une boucle pourrait s'illustrer par cette image :

Fonctionnement d'une boucle
Fonctionnement d'une boucle
  • On exécute nos instructions dans l'ordre, c'est-à-dire dans le code : de haut en bas.

  • Une fois que la dernière instruction de la boucle est exécutée, on retourne au début de la boucle. C'est-à-dire à la première instruction de la boucle.

  • On exécute à nouveau les instructions de la boucle.

  • Une fois arrivé à la dernière instruction, on retourne à la première instruction de la boucle.

  • Etc.

Mais alors là, si je suis ton raisonnement, on ne s'arrête jamais ?

C'est exact ! Mais je n'ai pas rédigé le chapitre précédent pour rien. Pour s'arrêter au cours d'une boucle, nous allons utiliser les conditions.

Gardons notre exemple de punition. On va avoir une condition qui sera de ce genre : "Lance la boucle 1 000 fois". Et pour traduire notre boucle, ce sera plutôt de ce genre : "Tant que ma condition n'est pas vérifiée, écris ma ligne de punition" soit "Tant que ma boucle n'a pas été lancée 1 000 fois, tu écris ça".

La boucle while

Une boucle while pourrait se traduire par un "tant que". Tant que ma condition n'est pas vérifiée, exécute-moi ces instructions. Voici la syntaxe d'une boucle while.

while condition {
    // Mettre les instructions à réaliser ici
}

La syntaxe ressemble très fortement à la syntaxe d'unif. La différence est que cette fois-ci, on n'écrit non pasif maiswhile. Le reste est similaire !

Réalisons maintenant notre punition. Comment faire ? Je vous donne ma solution et je la commente en dessous.

var nbDeLignes: Int = 1

while nbDeLignes <= 1000 {
    print("Je dois apprendre mes leçons en cours de Swift.")
    nbDeLignes += 1 // Equivalent à : nbDeLignes = nbDeLignes + 1
}
  • Je déclare et initialise dans un premier temps une variable nbDeLignes à 1.

  • J'indique que ma boucle doit s'exécuter tant quenbDeLignes est inférieur ou égal à 1 000.

  • Entre accolades, j'indique ce que je souhaite faire : afficher du texte et ajouter un à la valeur de la variablenbDeLignes .

Notez l'astuce pour ajouter 1 plus facilement à une variable ! C'est une astuce comme une autre. Vous pouvez aussi les faire avec les autres signes (+=, -=, *=, /=).

Il est possible de ne pas toujours écrire la même chose. Vous pouvez lors du passage dans la boucle faire varier l'affichage d'un texte ou la valeur d'une variable. Vous avez tout à fait le droit d'utiliser des conditions dans une boucle aussi. Lors de la première entrée dans la boucle, ma variablenbDeLignes est à 1. Comme 1 est bien inférieur ou égal à 1 000, alors on peut entrer dans la boucle. Une fois dans la boucle, les deux instructions vont pouvoir s'exécuter : le texte va donc s'afficher et la variable nbDeLignes ne sera non plus à 1 mais à 2. On a fini d'exécuter les instructions donc on retourne au début de la boucle. Avant d'exécuter la boucle, on vérifie à nouveau sinbDeLignes est toujours inférieur ou égal à 1 000. C'est toujours le cas. Donc on exécute à nouveau les instructions de la boucle. Et la boucle sera toujours exécutée jusqu'à ce que nbDeLignes soit à 1 001. Arrivé à ce moment, la condition n'est plus vérifiée pour la boucle et le programme va tout simplement l'ignorer et exécuter la suite du code.

1 000 lignes, ça fait beaucoup à vérifier, et pour que vous soyez sûr que je ne mens pas et que Swift a bien fait ce que vous lui avez demandé, voici une petite astuce supplémentaire.

var nbDeLignes: Int = 1

while nbDeLignes <= 1000 {
    print("\(nbDeLignes). Je dois apprendre mes leçons en cours de Swift.")
    nbDeLignes += 1
}

J'ai numéroté chaque ligne en début de phrase. Regardez dans la console et vous verrez que tous les nombres sont présents.

La boucle repeat ... while

La bouclerepeat ... while  est une variante de la bouclewhile. La différence est que cette boucle va toujours s'exécuter au moins une fois. Ça veut dire que si l'on fournit une condition fausse dès le départ, on entrera tout de même dans la boucle.

La syntaxe pour écrire cette boucle diffère légèrement, la voici :

repeat {
    // Mettre les instructions à exécuter ici
} while condition

Cette boucle est rarement utilisée, mais il se peut qu'un jour vous en ayez besoin. Sachez qu'elle existe.

On peut adapter notre exemple précédent avec la bouclerepeat ... while .

var nbDeLignes: Int = 1

repeat {
    print("\(nbDeLignes). Je dois apprendre mes leçons en cours de Swift.")
    nbDeLignes += 1
} while nbDeLignes <= 1000

La boucle for

Cette nouvelle boucle se présente dans une autre syntaxe qui vous permettra de gagner du temps dans la rédaction et d'amener de la clarté dans votre code. Le résultat sera le même que les deux types de boucles précédentes néanmoins.

Une boucle for est utile dès lors que la condition se joue sur l'incrémentation d'une variable, c'est-à-dire qu'on sait exactement quand est-ce que l'on veut s'arrêter.

En incrémentant de 1

Je vous présente une version de la boucle for quand il s'agit d'incrémenter une variable de 1 à chaque fois. Dans ce cas précis, vous savez donc exactement le nombre de fois que vous voulez exécuter la boucle.

var nbDeLignes: Int

for nbDeLignes in 1...1000 {
    print("\(nbDeLignes). Je dois apprendre mes leçons en cours de Swift.")
}

 

  • Inutile cette fois-ci d'initialiser votre variable. Elle sera initialisée grâce aufor. ;) 

  • On écrit le mot-cléfor (on peut le traduire par "pour" en français).

  • Suivi de la variable qui servira d'incrémenteur. Ce qui nous donne donc "PournbDeLignes ".

  • Suivi du mot-cléin. Ce mot-clé permet de dire "dans". On obtient ainsi "Pour nbDeLignes dans".

  • Suivi de 1...1000. Cela permettra d'indiquer toutes les valeurs entières comprises entre 1 et 1000. "Pour nbDeLignes dans 1, puis 2, puis 3, puis... puis 1000." On pourrait traduire cette phrase encore mieux de la sorte : "PournbDeLignes  allant de 1 à 1 000, exécute moi ça".
    En fait, à chaque passage de la boucle, on associe 1, puis 2, puis 3, etc., jusque 1 000 à la variable. Voici pourquoi il est inutile ici d'initialiser auparavant votre variable.

  • Et enfin, on ouvre et ferme les accolades. C'est à l'intérieur qu'on indique les instructions à réaliser.

 ‌

Pour résumer

  • Une boucle permet de réaliser une suite d'instructions plusieurs fois.

  • Il existe trois types de boucles :for  qui permet d'éxécuter un nombre précis de fois une suite d'instruction,while  etrepeat ... whilequi s'exécute tant que la condition de la boucle n'est pas vérifiée.

Exemple de certificat de réussite
Exemple de certificat de réussite