logo

ローカル変数とグローバル変数の違い

どのプログラミング言語でも変数には重要な役割があります。変数はスコープに基づいてグローバル変数とローカル変数に分類されます。グローバル変数とローカル変数の主な違いは、グローバル変数はプログラム全体でグローバルにアクセスできるのに対し、ローカル変数はそれが定義されている関数またはブロック内でのみアクセスできることです。このトピックでは、まず変数とスコープ、ローカル変数、グローバル変数、そして両方の変数の違いについて理解します。

ローカル変数とグローバル変数

変数とは何ですか?

変数は、コンピューター プログラムで値を保存するためにメモリの場所に付けられる名前です。プログラム内で参照および操作できる情報を格納するために使用されます。

変数には任意の名前を選択できますが、プログラミングのセマンティクスに従う必要があります。それはあり得ることです 、a、b、x、y、z、sub、div、total、avg など

プログラムで保存して使用したい 2 つの値 10 と 20 があるとします。このためには、変数を使用する必要があり、以下の手順を実行します。

  • まず、適切な名前の変数を作成または宣言します。
  • これらの値を変数に割り当てて保存します。
  • これらの値がストアされると、プログラム内でこれらの変数を名前とともに使用できるようになります。
ローカル変数とグローバル変数

上の図でわかるように、001 と 002 の 2 つのメモリ スロットがあり、これらの場所に A と B という名前を付けました。A には 10 が含まれ、B には 20 が含まれます。

プログラミング言語が異なれば、変数を宣言する方法も異なります。たとえば、C 言語では、次の方法で変数を宣言できます。

構文: (C 言語の変数宣言構文)

 datatype v1, v2, v3,....; 

例:

 #include void main(){ int a; int b; int sum; } 

変数のスコープ

各変数は定義され、その範囲内で使用でき、プログラムでこの変数が使用できるかどうかが決まります。スコープとは、その変数の有効期間を意味します。これは、変数がそのスコープ内でのみアクセスまたは参照できることを意味します。

変数のスコープは宣言で定義でき、変数は主に次の 2 つの方法で宣言されます。

    グローバル変数:すべての機能の外でローカル変数:関数ブロック内:

グローバル変数とは何ですか?

  • グローバル変数は、すべての関数またはブロックの外部で宣言され、プログラム内でグローバルにアクセスできる変数です。
  • プログラム内に存在する任意の関数からアクセスできます。
  • グローバル変数を宣言すると、さまざまな関数で使用するときにその値を変更できます。
  • グローバル変数の有効期間は、プログラムが実行されるまで存在します。これらの変数は、コンパイラによって指定された固定メモリ位置に格納され、自動的にクリーンアップされません。
  • グローバル変数は主にプログラミングで使用され、すべての関数が同じデータにアクセスする必要がある場合に役立ちます。

例:

ネットワークとネットワークの種類
 #include int a=50, b=40; void main() { printf('a = %d and b=%d',a,b); } 

上の例では、a と b がグローバル変数です。

グローバル変数の利点

  • グローバル変数には、プログラム内に存在するすべての関数からアクセスできます。
  • 必要な宣言は 1 つだけです。
  • すべての関数が同じデータにアクセスする場合に非常に便利です。

グローバル変数の欠点

  • グローバル変数の値はプログラム内のどの関数でも使用できるため、誤って変更される可能性があります。
  • 多数のグローバル変数を使用すると、プログラムでエラーが発生する可能性が高くなります。

ローカル変数とは何ですか?

    関数ブロック内または内部で宣言された変数は、ローカル変数として知られています。
  • これらの変数は、宣言されている関数内でのみアクセスできます。
  • ローカル変数の有効期間はその関数内のみです。つまり、変数は関数が実行されるまで存在します。関数の実行が完了すると、ローカル変数は破棄され、関数の外部には存在しなくなります。
  • ローカル変数の範囲が制限される理由は、ローカル変数がスタックに格納されるためです。スタックは本質的に動的であり、その中に格納されているデータが自動的にクリーンアップされます。
  • しかし、「static」キーワードを使用して変数を静的にすることで、ローカル変数の値を保持することができます。

例:

 #include void main() { int x=50, y=40; printf('x = %d and y=%d',x, y); } 

上の例では、main 関数内で x と y の 2 つの変数を宣言しました。したがって、これらはローカル変数です。

ローカル変数の利点

  • ローカル変数の同じ名前は、それが宣言されている関数によってのみ認識されるため、異なる関数で使用できます。
  • ローカル変数は、関数の実行時の限られた時間だけメモリを使用します。その後、同じメモリ位置を再利用できます。

ローカル変数の欠点

  • ローカル変数のスコープはその関数のみに制限されており、他の関数では使用できません。
  • ローカル変数によるデータ共有は許可されません。

グローバル変数とローカル変数の比較表

グローバル変数 ローカル変数
グローバル変数は、すべての関数ブロックの外側で宣言されます。 ローカル変数は関数ブロック内で宣言されます。
範囲はプログラム全体にわたって残ります。 スコープは制限されており、それらが宣言されている関数内にのみ残ります。
グローバル変数を変更すると、それが使用されている場所に関係なく、プログラム全体に影響します。 ローカル変数を変更しても、プログラムの他の機能には影響しません。
グローバル変数は、プログラムの実行中ずっとプログラム内に存在します。 関数の実行時にローカル変数が作成され、実行が終了すると変数は破棄されます。
プログラム内に存在するすべての関数から、プログラム全体を通じてアクセスできます。 これは、それが宣言されている関数ステートメントによってのみアクセスでき、他の関数からはアクセスできません。
グローバル変数が初期化されていない場合、デフォルトではゼロが取られます。 ローカル変数が初期化されていない場合、デフォルトでガベージ値が取得されます。
グローバル変数はメモリのデータ セグメントに格納されます。 ローカル変数はメモリ内のスタックに格納されます。
同じ名前で多数の変数を宣言することはできません。 同じ名前のさまざまな変数を他の関数で宣言できます。

ローカル変数とグローバル変数の違いを理解するための例

ここで、ローカル変数とグローバル変数の違いをよりよく理解するために、さまざまなプログラミング言語の例を理解しましょう。

C におけるローカルとグローバル

例-1:

 #include // Global variables int a; int b; int Add() { return a + b; } int Mul() { int c=10; //Local Variable int d=20; ////Local Variable return c*d; } void main() { int Ans1, Ans2, c=30;// Local variable a = 50; b = 70; Ans1 = Add(); Ans2= Mul(); printf('The addition result is: %d
',Ans1); printf('The Multiplication result is: %d
',Ans2); printf('%d
', c); } 

出力:

 The addition result is: 120 The Multiplication result is: 200 30 

上記のプログラムでわかるように、 ある そして b Add() や main() などのさまざまな関数でアクセスされるグローバル変数。一方、c、d、Ans1、Ans2 などのローカル変数もあり、これらは宣言されている関数によってのみアクセスされます。

Mul() 関数の外で c 変数と d 変数を使用しようとすると、それらは新しい変数として使用されます。 main() 関数でも c を取り込むことで示したように、これは新しい変数として扱われます。

ローカル vs. Python のグローバル

例-1:

 v1 = 'Hey, I am Global Variable!, I can be used everywhere in the program.' #globalvariable def func1(): v2='Hey, I am Local Variable!, I can be used within this block only in the program.' #localvariable print(v2) func1() #calling func1 def func2(): print(v1) func2() #callin func2 

出力:

 Hey, I am a Local Variable!, I can be used within this block only in the program. Hey, I am Global Variable!, I can be used everywhere in the program. 

上記のプログラムでは、1 つのグローバル変数 v1 と 1 つのローカル変数 v2 を取得しました。 v1 はグローバルであるため、どの関数からも簡単にアクセスでき、v2 はローカルです。宣言された関数内でのみ使用されます。しかし、func1 で v1 を使用しようとすると、エラーが発生します。以下の例を見てみましょう。

例-2

 v1 = 'Hey, I am Global Variable!, I can be used everywhere in the program.' #globalvariable def func1(): v2='Hey, I am Local Variable!, I can be used within this block only in the program.' #localvariable print(v2) print(v1) func1() #calling func1 def func2(): print(v1) print(v2) func2() #callin func2 

v1 にアクセスしてみると、fun1 と func2 で簡単にアクセスできます。しかし、v2 の関数外、つまり func2 内でアクセスしようとすると、ランタイム エラーが発生します。上記のコードを実行すると、次の出力が得られます。

ランタイムエラー:

 NameError: global name 'v2' is not defined 

出力:

 Hey, I am Local Variable!, I can be used within this block only in the program. Hey, I am Global Variable!, I can be used everywhere in the program. Hey, I am Global Variable!, I can be used everywhere in the program. 

ローカル vs. Javaのグローバル変数

Java にはグローバル変数の概念がありません。 Java はオブジェクト指向プログラミング言語であるため、すべてがクラスの一部です。しかし、変数をグローバルにアクセスできるようにしたい場合は、 静的 キーワード。

 class Demo { // static variable static int a = 10; // non-static or local variable int b = 20; } public class Main { public static void main(String[] args) { Demo obj = new Demo(); // accessing the non-static variable System.out.println('Value of non-static variable is: ' + (obj.b)); // accessing the static variable System.out.println('Value of static variable is:' + (Demo.a)); } } 

出力:

 Value of non-static variable is: 20 Value of static variable is:10 

上記のプログラムでは、1 つのローカル変数または非静的変数と 1 つの静的変数を使用しました。ローカル変数には Demo クラスのオブジェクトを使用してアクセスできますが、静的変数にはクラスの名前を使用してアクセスできます。