3 - Les variables

Où déclarer ses variables ?

Pour déclarer une variable, il faut être à un endroit où on a le droit de déclarer des variables, typiquement juste après leisde définition d'une fonction. Si on veut déclarer une variable à un autre endroit, il existe une autre méthode : on peut remplacer une instruction par un bloc.

declare 
  declaration de variables
begin
 liste d'instructions pour laquelle la variable existe
end; 

Ceci déclare de nouvelles variables valides uniquement pour les instructions situées entre lebeginet leend;. Après leend;, les variables déclarées entre ledeclareet lebeginn'existent plus.

La déclaration d'une variable

Une déclaration de variable suit le schéma suivant :

 nom_de_la_variable : [constant] type_de_la_variable [:= valeur_initiale]; 

La valeur initiale est facultative. Si cette variable ne change jamais, il est conseillé (avec certaines options de compilation, il est même obligatoire) de la noterconstant. Si on veut déclarer plusieurs variables du même type, on peut les regrouper :

 variable1, variable2 [...] : [constant] type_des_variables [:= valeur_initiale]; 

Les types de base

En Ada, on peut faire des types très contraints, comme par exemple, les entiers pairs entre 10 et 50. On reviendra sur ce point plus tard. Les types de bases sont

Booleanavec deux valeurs:trueetfalse,

Integerpour les entiers,

Floatpour les réels,

Characterpour les caractères,

Stringpour les chaînes de caractères.

Les entiers

Il existe plusieurs façons de noter un entier en Ada, par exemple :

 e1 : Integer := 1E6; e2 : Integer := 1_000_0_00; e3 : Integer := 16#12AB#; 

On peut naturellement écrire l'entier tel quel. Pour améliorer la lisibilité, on peut aussi mettre le caractère_n'importe où pour séparer différents groupes de chiffres (dans l'exemple ci-dessus, la lisibilité n'est pas vraiment meilleure, c'est juste pour montrer qu'on peut mettre un_n'importe où). On peut aussi utiliser la notationbase#nombre#pour spécifier un nombre dans une base autre que le décimal. La notationnombreEexposantdésigne le nombrenombre*base^exposantavecbase=10 par défaut.

Les chaines de caractères

Le typeStringd'Ada est très différent des "classes"stringque l'on rencontre en C++ ou Java, il se rapproche plus du typechar[]. En effet une chaîne a une taille fixe qui ne peut pas changer. Par exemple:

procedure taille_string is 
  s : String := "coucou";
begin
  s := "test"; -- Ceci ne compile pas
end;

échoue à la compilation avec un message du genre

taille_string:4:09: warning: wrong length for array of subtype of "Standard.String" defined at line 2.

En effet, la ligne 2 déclare une chaîne de caractères de taille 6, on ne peut donc pas lui affecter une chaîne de caractères de taille 4 comme"test". Pour déclarer une chaîne sans l'initialiser, on utilise la syntaxe

 nom_de_la_variable : String(indice_du_premier_element..indice_du_dernier_element); 

Exemple

Voici un petit exemple de programme avec une "variable" :

with Text_IO; use Text_IO;  
 
procedure put_var is 
begin
  Put("Veuillez entrer votre nom: ");
  declare
    name : constant String := Get_Line;
  begin
    Put("Bonjour ");
    Put_Line(name);
  end;
end put_var; 

Dans ce programme,Get_Linelit une ligne entrée au clavier. Ici, on ne connaît pas à l'avance la taille de la chaîne de caractèresname. On ne peut donc pas la déclarer avant de la connaître, c'est pourquoi on utilise un blocdeclare ... begin ... end

L'affectation

Comme on peut s'en douter en regardant la façon dont on donne une valeur initiale à une variable, l'affectation se fait grâce au symbole ":=". Pour donner une valeur à une variable, on utilise une instruction du genre :

 nom_de_la_variable := expression_donnant_la_nouvelle_valeur;