Les Structures de Contrôle
Maintenant que nous avons vu les principaux concepts du langage objets Eiffel, nous allons pouvoir nous consacrer plus précisément à sa syntaxe. La spécification de l'ensemble de cette syntaxe est accessible (en anglais) depuis cette adresse
Eiffel est un langage qui allie puissance, élégance et compacité du langage. Ce dernier point signifie que sa syntaxe est très lisible et facilement compréhensible pour le débutant. Un des moyens pour y arriver a été, par exemple, de n'avoir qu'une seule structure de contrôle pour tous les types d'itérations. Une boucle "de base" en Eiffel se présente sous la forme suivante:

Le bloc d'initialisation comprend les instructions d'initialisation de la boucle (en général, initialisation d'un indice, par exemple). Il peut être vide. Notons qu'il n'y a aucune différence à l'exécution entre une instruction écrite juste avant le from et une écrite dans le bloc d'initialisation, il s'agit simplement d'une séparation destinée à faciliter la lecture.
La condition d'arrêt est une expression booléenne et est obligatoire.
Enfin, le corps contient les instructions à exécuter dans l'itération. C'est ici également que prennent place les instructions qui vont faire varier "I'lndice" de boucle ou ce qui en tient lieu.
Avec cette structure, tous les types d'itération peuvent être exprimés.
Contrairement à la plupart des autres langages, Eiffel offre la possibilité de sécuriser ses itérations à l'aide de deux types d'assertions : le variant de boucle et l'invariant de boucle. L'invariant et le variant ne sont pas obligatoires.
L'invariant sert à indiquer une condition qui doit être vraie tout au long de la boucle (par exemple, que l'indice de boucle ne doit pas déborder des bornes d'un tableau).
Le variant, lui, est une expression entière, dont la valeur doit décroître à chaque étape de l'itération, tout en restant supérieure à zéro. Il sert à garantir que l'itération progresse, mais qu'elle se finira un jour (le variant à zéro déclenchant une violation d'assertion avec un message d'erreur explicite).
La terminaison de l'itération est ainsi assurée, évitant les boucles sans fin. Bien entendu, ces assertions de boucle, comme toutes les assertions Eiffel, peuvent être activées ou non lors de la compilation, selon que l'on est en train de tester son programme ou que l'on produise la version finale, optimisée, dont on est (à peu près) sûr qu'elle soit correcte.
Nous avons également déjà vu des instructions conditionnelles simples, comme le if .. then...else, qu'il n'est pas besoin d'expliquer. Notons simplement qu'il existe une petite variante syntaxique bien pratique, qui permet d'éviter d'imbriquer des suites de conditionnelles

Il existe bien entendu aussi en Eiffel une instruction de choix multiple (analogue au "case" ou au "switch" de nombreux langages). Il s'agit du inspect:

L'expression qui sert d'aiguillage doit être de type INTEGER, CHARACTER ou BOOLEAN. Selon la valeur qu'elle prend à l'exécution, un seul des choix sera valide. Les différents cas possibles (les différents when) doivent être disjoints et leur ordre n'a aucune importance (contrairement au if..then ... else). Ils sont exprimés sous forme de valeur(s) ou d'intervalles de valeurs. Les blocs sont des suites d'instructions (éventuellement vides).