Pascal - Alcance variable

Un alcance en cualquier programación es una región del programa donde una variable definida puede tener su existencia y más allá de esa variable no se puede acceder. Hay tres lugares, donde las variables se pueden declarar en el lenguaje de programación Pascal:

  • Dentro de un subprograma o un bloque que se llama variables locales

  • Fuera de todos los subprogramas que se denominan variables globales

  • En la definición de parámetros de subprograma que se denomina parámetros formales

Expliquemos que son local y global variables y parámetros formales.

Variables locales

Las variables que se declaran dentro de un subprograma o bloque se denominan variables locales. Solo pueden ser utilizados por declaraciones que están dentro de ese subprograma o bloque de código. Las variables locales no son conocidas por los subprogramas fuera del propio. A continuación se muestra el ejemplo que utiliza variables locales. Aquí, todas las variables de una , b y c son locales de programa denominado 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.

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

value of a = 10 b = 20 c = 30

Ahora, vamos a extender el programa poco más, vamos a crear un procedimiento denominado de visualización, que tendrá su propio conjunto de variables a , b y c y mostrar sus valores, desde el programa de 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.

Cuando se compila y ejecuta el código anterior, produce el siguiente 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

Variables globales

Las variables globales se definen fuera de una función, normalmente encima del programa. Las variables globales mantendrán su valor durante toda la vida útil de su programa y se puede acceder a ellas dentro de cualquiera de las funciones definidas para el programa.

UN globalcualquier función puede acceder a la variable. Es decir, una variable global está disponible para su uso en todo el programa después de su declaración. A continuación se muestra un ejemplo usandoglobal y local variables -

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.

Cuando se compila y ejecuta el código anterior, produce el siguiente 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

Tenga en cuenta que la visualización del procedimiento tiene acceso a las variables a, byc, que son variables globales con respecto a la visualización, así como sus propias variables locales. Un programa puede tener el mismo nombre para variables locales y globales, pero el valor de la variable local dentro de una función tendrá preferencia.

Cambiemos un poco el ejemplo anterior, ahora las variables locales para la visualización del procedimiento tienen los mismos nombres 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.

Cuando se compila y ejecuta el código anterior, produce el siguiente 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