En programmation impérative, une structure de contrôle est une commande qui contrôle l'ordre dans lequel les différentes instructions d'un algorithme ou d'un programme informatique sont exécutées.
On appelle aussi cet enchaînement d'instructions le flot d'exécution d'un programme.
Un programme informatique est une suite d'instructions. Un registre interne du microprocesseur, le compteur ordinal (PC) est chargé de mémoriser l'adresse de la prochaine instruction à exécuter.
La plupart des instructions d'un programme sont exécutées séquentiellement: après le traitement de l'instruction courante le compteur ordinal est incrémenté, et l'adresse de la prochaine instruction est chargée.
La première des structures de contrôle est donc la séquence. Elle permet l'évaluation ordonnée d'une suite d'expressions, souvent séparées par un point-virgule ou par des retours chariots.
Un programme s'arrête généralement après l'exécution de la dernière instruction. La plupart des langages de programmation proposent également une ou plusieurs instructions pour stopper l'exécution du programme à une position arbitraire.
Selon l'environnement d'exécution sous-jacent (système d'exploitation ou microprocesseur), cet arrêt peut être définitif ou une suspension de l'exécution du programme en attendant un évènement externe. C'est par exemple le fonctionnement habituel de la plupart des instructions d'entrée sorties qui bloquent le flot d'exécution jusqu'à ce que le périphérique ait terminé de traiter les données.
Il existe d'autres variantes de boucle, leur comportement est identique à celle d'une boucle tant que, mais elles nécessitent des variables additionnelles au registre PC pour mémoriser leur état.
POUR compteur DE 0 à fin Instruction 1 FIN POUR Instruction 2
Un compteur permet de réaliser une boucle associée à une variable entière ou un pointeur qui sera incrémentée à chaque itération. Il est souvent utilisé pour exploiter les données d'une collection indexée.
Exemples d'implémentations:
Fortran II a introduit un premier compteur rudimentaire en 1958.
La notion de compteur peut être directement supportée par le microprocesseur, c'est le cas par exemple avec l'instruction LOOP de l'assembleur 86
Suivant les langages on peut fixer la valeur de début, de fin et la valeur d'incrément à chaque itération. Un de ses usages typique étant de servir d'index, la valeur du compteur est généralement accessible depuis l'intérieur de la boucle.
La boucle for des langages C,C++ ou Java est beaucoup plus générale qu'un simple compteur.
POURCHAQUE valeur DANS collection Instruction 1 FIN POURCHAQUE Instruction 2
Un itérateur (ou curseur ou énumérateur) est un objet qui permet de réaliser une boucle parcourant tous les éléments contenus dans une structure de données.
Des langages comme le C++ ou l'Objective C (dans la version initiale du langage) n'ont pas de mots clefs spécifiques pour les itérateurs, ils utilisent des méthodes de bibliothèque associées à des structures de contrôles plus générales.
exemple en Objective C:
NSEnumerator* enumerator = [collection objectEnumerator]; NSObject* obj; while(obj = [enumerator nextObject]){ NSLog(@"%@", obj); }
Dans d'autres langages, ce concept bénéficie de structures de contrôle dédiées. Exemples d'implémentations: