Pascal-可変スコープ

プログラミングのスコープは、定義された変数が存在する可能性があり、その変数を超えてアクセスできないプログラムの領域です。Pascalプログラミング言語で変数を宣言できる場所は3つあります-

  • ローカル変数と呼ばれるサブプログラムまたはブロック内

  • グローバル変数と呼ばれるすべてのサブプログラムの外

  • 仮パラメータと呼ばれるサブプログラムパラメータの定義

何であるかを説明しましょう local そして global 変数と仮パラメータ。

ローカル変数

サブプログラムまたはブロック内で宣言される変数は、ローカル変数と呼ばれます。それらは、そのサブプログラムまたはコードのブロック内にあるステートメントによってのみ使用できます。ローカル変数は、それ自体の外部のサブプログラムには認識されません。以下は、ローカル変数を使用した例です。ここで、すべての変数ab、およびcは、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.

上記のコードをコンパイルして実行すると、次の結果が得られます。

value of a = 10 b = 20 c = 30

ここで、プログラムをもう少し拡張して、displayという名前のプロシージャを作成しましょう。このプロシージャは、独自の変数abcのセットを持ち、プログラム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.

上記のコードをコンパイルして実行すると、次の結果が得られます。

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

グローバル変数

グローバル変数は、関数の外部、通常はプログラムの上で定義されます。グローバル変数は、プログラムの存続期間を通じてその値を保持し、プログラム用に定義された任意の関数内でアクセスできます。

A global変数には任意の関数からアクセスできます。つまり、グローバル変数は、宣言後、プログラム全体で使用できます。以下は使用例ですglobal そして local 変数-

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.

上記のコードをコンパイルして実行すると、次の結果が得られます。

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

プロシージャdisplayは、変数a、b、およびcにアクセスできることに注意してください。これらは、表示に関するグローバル変数であり、独自のローカル変数でもあります。プログラムはローカル変数とグローバル変数に同じ名前を付けることができますが、関数内のローカル変数の値が優先されます。

前の例を少し変更してみましょう。ここで、プロシージャ表示のローカル変数abc −と同じ名前になります。

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.

上記のコードをコンパイルして実行すると、次の結果が得られます。

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