next up previous contents
Next: Les exceptions Up: Les fonctions Previous: Liaisons locales à un

Portée des déclarations

La portée d'une déclaration est la region dans le texte du programme où la déclaration est pontentiellement visible (autrement dit, pontentiellement utilisable).

Ces règles ont pour conséquence:

Nous changeons légèrement l'exemple:

procedure exemple is
  un : constant integer := 1;
  x,y : integer := 1;
  function succeseur(x:integer) return integer is
  begin
      return(x + un);
  end succeseur;
begin
  y := x + succeseur(3);
end exemple;

D'après ces règles:

La notion de portée nous dit où chaque déclaration est pertinente, mais elle ne nous dit pas comme choisir entre plusieurs déclarations pertinentes.

Visibilité de déclarations

La visibilité d'une déclaration est la region du programme où toute occurrence de l'identificateur est lié par cette déclaration. En Ada, une déclaration est visible partout dans sa portée, sauf si une autre déclaration du même identificateur est introduite dans l'espace de cette portée.

Ainsi, une déclaration est visible:

D'après ces règles on constate:

Masquage de déclarations

Une déclaration d'identificateur n'est pas forcément visible dans toute sa portée. Toute nouvelle déclaration de l'identificateur qui se trouve dans la portée de la première, masque la visibilité de celle-ci, dans toute la portée de la deuxième déclaration. La première déclaration de l'identificateur devient inaccesible (non visible) dans toute la portée de la deuxième déclaration.

Dans l'exemple, les deux déclarations de x (celle globale et celle du paramètre formel) ont pour portée le corps de la fonction successeur. Mais, seul le paramètre formel est visible à l'intérieur de la fonction. En effet, la déclaration globale de x a pour portée tout le programme, y compris la fonction, mais n'est pas visible dans celle-ci. On dit qu'elle est masquée par la déclaration du paramètre x.

Exemple: Une fonction qui contient une fonction locale,

procedure exemple2 is
   a,b,c : integer;
   function somme_carres(x,y : integer) return integer is
       function carre(x : integer) return integer is
       begin
           return(x*x);
       end carre;
       z : integer;
   begin
       z := carre(x) + carre(y);
       return(z);
   end somme_carres;
begin
 -- Lecture de a,b ...
    c := somme_carres(a,b);
 -- Affichage de c ...
end exemple2;


next up previous contents
Next: Les exceptions Up: Les fonctions Previous: Liaisons locales à un
Maria-Viginia Aponte
2001-11-21