Pascal - Escopo Variável

Um escopo em qualquer programação é uma região do programa onde uma variável definida pode ter sua existência e além dessa variável não pode ser acessada. Existem três lugares, onde as variáveis ​​podem ser declaradas na linguagem de programação Pascal -

  • Dentro de um subprograma ou bloco que é chamado de variáveis ​​locais

  • Fora de todos os subprogramas que são chamados de variáveis ​​globais

  • Na definição dos parâmetros do subprograma que são chamados de parâmetros formais

Deixe-nos explicar o que são local e global variáveis ​​e parâmetros formais.

Variáveis ​​Locais

As variáveis ​​declaradas dentro de um subprograma ou bloco são chamadas de variáveis ​​locais. Eles podem ser usados ​​apenas por instruções que estão dentro desse subprograma ou bloco de código. Variáveis ​​locais não são conhecidas por subprogramas fora dos seus próprios. A seguir está o exemplo usando variáveis ​​locais. Aqui, todas as variáveis a , b e c são locais para o programa chamado exLocal .

program exLocal; 
var
   a, b, c: integer;

begin
   (* actual initialization *)
   a := 10;
   b := 20;
   c := a + b;
   
   writeln('value of a = ', a , ' b =  ',  b, ' and c = ', c);
end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

value of a = 10 b = 20 c = 30

Agora, vamos estender pouco mais o programa, vamos criar um procedimento chamado de exibição, que terá o seu próprio conjunto de variáveis de um , b e c e exibir seus valores, desde o programa exLocal .

program exLocal;
var
   a, b, c: integer;
procedure display;

var
   a, b, c: integer;
begin
   (* local variables *)
   a := 10;
   b := 20;
   c := a + b;
   
   writeln('Winthin the procedure display');
   writeln('value of a = ', a , ' b =  ',  b, ' and c = ', c);
end;

begin
   a:= 100;
   b:= 200;
   c:= a + b;
   
   writeln('Winthin the program exlocal');
   writeln('value of a = ', a , ' b =  ',  b, ' and c = ', c);
   display();
end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Within the program exlocal
value of a = 100 b = 200 c = 300
Within the procedure display
value of a = 10 b = 20 c = 30

Variáveis ​​globais

Variáveis ​​globais são definidas fora de uma função, geralmente no topo do programa. As variáveis ​​globais manterão seu valor ao longo da vida do seu programa e podem ser acessadas dentro de qualquer uma das funções definidas para o programa.

UMA globalvariável pode ser acessada por qualquer função. Ou seja, uma variável global está disponível para uso em todo o programa após sua declaração. A seguir está um exemplo usandoglobal e local variáveis ​​-

program exGlobal;
var
   a, b, c: integer;
procedure display;
var
   x, y, z: integer;

begin
   (* local variables *)
   x := 10;
   y := 20;
   z := x + y;
   
   (*global variables *)
   a := 30;
   b:= 40;
   c:= a + b;
   
   writeln('Winthin the procedure display');
   writeln(' Displaying the global variables a, b, and c');
   
   writeln('value of a = ', a , ' b =  ',  b, ' and c = ', c);
   writeln('Displaying the local variables x, y, and z');
   
   writeln('value of x = ', x , ' y =  ',  y, ' and z = ', z);
end;

begin
   a:= 100;
   b:= 200;
   c:= 300;
   
   writeln('Winthin the program exlocal');
   writeln('value of a = ', a , ' b =  ',  b, ' and c = ', c);
   
   display();
end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Within the program exlocal
value of a = 100 b = 200 c = 300
Within the procedure display
Displaying the global variables a, b, and c
value of a = 30 b = 40 c = 70
Displaying the local variables x, y, and z
value of x = 10 y = 20 z = 30

Observe que a tela de procedimento tem acesso às variáveis ​​a, b e c, que são variáveis ​​globais em relação à tela, bem como às suas próprias variáveis ​​locais. Um programa pode ter o mesmo nome para variáveis ​​locais e globais, mas o valor da variável local dentro de uma função terá preferência.

Vamos mudar um pouco o exemplo anterior, agora as variáveis ​​locais para a exibição do procedimento têm os mesmos nomes que a , b , c -

program exGlobal;
var
   a, b, c: integer;
procedure display;

var
   a, b, c: integer;

begin
   (* local variables *)
   a := 10;
   b := 20;
   c := a + b;
   
   writeln('Winthin the procedure display');
   writeln(' Displaying the global variables a, b, and c');
   
   writeln('value of a = ', a , ' b =  ',  b, ' and c = ', c);
   writeln('Displaying the local variables a, b, and c');
   
   writeln('value of a = ', a , ' b =  ',  b, ' and c = ', c);
end;

begin
   a:= 100;
   b:= 200;
   c:= 300;
   
   writeln('Winthin the program exlocal');
   writeln('value of a = ', a , ' b =  ',  b, ' and c = ', c);   
   
   display();
end.

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Within the program exlocal
value of a = 100 b = 200 c = 300
Within the procedure display
Displaying the global variables a, b, and c
value of a = 10 b = 20 c = 30
Displaying the local variables a, b, and c
value of a = 10 b = 20 c = 30