4 - Les structures de contrôle

Les conditions

Les conditions doivent être des booléens, on ne peut pas comme en C tester si un entier est différent de 0 juste en mettant "if mon_entier", il faut explicitement dire que l'on veut vérifier que cet entier est différent de 0. Les opérateurs de comparaison sont les suivants :

  •  
= : égalité (== en C)
  •  
/= : différent (!= en C)
  •  
< : inférieur strict
  •  
> : supérieur strict
  •  
<= : inférieur ou égal
  •  
>= : supérieur ou égal
  •  
in : appartenance à un intervalle (noté borne_inf..borne_sup)
  •  
not in : non appartenance à un intervalle

On peut ensuite combiner les résultats obtenus avec les opérateurs suivant :

  •  
not : négation
  •  
and : "et" (attention, les deux conditions sont évaluées ! Différent du && du C)
  •  
or : "ou" (attention, les deux conditions sont évaluées ! Différent du || du C)
  •  
xor : "ou exclusif" (équivalent du ^^ en C)
  •  
and then : "et", évalue la 1ère expression (celle de gauche) puis si elle est vrai la seconde et renvoie true si les 2 sont vraies. (équivalent du && en C)
  •  
or else : "ou", évalue la 1ère expression (celle de gauche) puis si elle est fausse la seconde et renvoie true si l'une ou l'autre est vrai (équivalent du || en C)

Le if then else

if condition then
  liste d'instructions
[elsif condition
  liste d'instructions]
  [...]
[else
  liste d'instructions] 
end if; 

Le switch

case expression is
  when valeur_1 =>; liste d'instructions 
 [when valeur_2|valeur_3|valeur_4 =>; listes d'instructions] 
 [...]
 [when others =>; listes d'instructions] 
end case; 

Contrairement au C, un break est contenu implicitement à la fin des différents cas.

Les boucles

La boucle de base, la boucle infinie (cela peut sembler absurde, mais c'est très utile, surtout en robotique) se présente comme ceci :

loop 
  liste d'instructions
end loop; 

Maintenant, si on veut faire une boucle mais en sortir à un moment donné, on peur utiliser l'instruction : exit when condition;

Le for

for indice in [reverse] intervalle loop
  liste d'instructions
end loop; 

L'intervalle est de la forme debut..fin avec debut inférieur à fin. Si on veut faire une boucle avec un indice décroissant, il faut utiliser le mot clef reverse, un intervalle du style 5..1 est vide et donc la boucle ne sera jamais exécutée. NOTE: indice n'est pas une vraie variable, il ne faut pas le déclarer en même temps que les autres variables et on ne peut pas le modifier.

Le while

while condition loop 
  liste d'instructions 
end loop;