ローカル変数とグローバル変数の違い
ローカル変数とグローバル変数の主な違い
- ローカル変数は関数の内部で宣言されますが、グローバル変数は関数の外部で宣言されます。
- ローカル変数は関数の実行開始時に作成され、関数の終了時に失われます。一方、グローバル変数は実行開始時に作成され、プログラムの終了時に失われます。
- ローカル変数はデータ共有を提供しませんが、グローバル変数はデータ共有を提供します。
- ローカル変数はスタックに格納されますが、グローバル変数はコンパイラによって決定された固定の場所に格納されます。
- ローカル変数にはパラメータの受け渡しが必要ですが、グローバル変数には必要ありません
変数とは何ですか?
変数とは、プログラムが操作できる記憶領域に割り当てられる名前です。 変数のタイプによって、変数のメモリのサイズとレイアウトが決まります。
また、メモリ内に格納する必要がある値の範囲と、その変数に適用できる操作の性質も決定します。
変数の範囲
変数のスコープは単に変数の存続期間です。 これは、変数が適用可能または有効になるコードのブロックです。 例えば:
function foo(){ var x; }
関数「foo」内で変数「x」を宣言します。 その変数のスコープはその関数内に残り、その関数の外では使用できません。
変数プログラミング言語で変数を宣言できる場所は XNUMX つあります。
- 関数またはブロック内: ローカル変数
- すべての関数の外側: グローバル変数
- 関数パラメータの定義: 仮パラメータ
ローカル変数
ローカル変数 は、プログラミング ブロックまたはサブルーチン内で宣言された変数の型として定義されます。宣言されたサブルーチンまたはコード ブロック内でのみ使用できます。ローカル変数は、関数のブロックが実行中になるまで存在します。その後、自動的に破棄されます。
ローカル変数の例
public int add(){ int a =4; int b=5; return a+b; }
ここで、「a」と「b」はローカル変数です。
グローバル変数
A グローバル変数 プログラム内の変数はサブルーチンまたは関数の外で定義されています。 グローバル スコープを持っているため、プログラムの存続期間全体にわたってその値が保持されます。 したがって、シャドウされない限り、プログラム内で定義された任意の関数によってプログラム全体でアクセスできます。
例:
int a =4; int b=5; public int add(){ return a+b; }
ここで、「a」と「b」はグローバル変数です。
ローカル変数とグローバル変数
ここでは、ローカル変数とグローバル変数の基本的な違いをいくつか示します。
ローカル | Global | |
---|---|---|
対象領域 | 関数内で宣言されます。 | 関数の外で宣言されています。 |
値 | 初期化されていない場合は、ガベージ値が格納されます | 初期化されていない場合は、デフォルトとしてゼロが保存されます。 |
永続ライセンス | これは関数の実行開始時に作成され、関数の終了時に失われます。 | これは、プログラムのグローバル実行が開始される前に作成され、プログラムが終了すると失われます。 |
データ共有 | ローカル変数のデータは XNUMX つの関数からしかアクセスできないため、データ共有はできません。 | 複数の関数が同じグローバル変数にアクセスできるため、データ共有が可能です。 |
技術パラメータ | ローカル変数が他の関数の値にアクセスするにはパラメータの受け渡しが必要です | グローバル変数はプログラム全体で参照できるため、パラメーターを渡す必要はありません。 |
変数値の変更 | ローカル変数の値が XNUMX つの関数で変更された場合、その変更は別の関数では表示されません。 | XNUMX つの関数でグローバル変数の値が変更されると、プログラムの残りの部分にも変更が反映されます。 |
アクセス者 | ローカル変数は、宣言されている関数内でステートメントを使用してアクセスできます。 | プログラム内の任意のステートメントによってグローバル変数にアクセスできます。 |
メモリストレージ | 指定しない限り、スタックに格納されます。 | コンパイラによって決定された固定の場所に保存されます。 |
グローバル変数を使用する利点
- プログラム内のすべての関数またはモジュールからグローバル変数にアクセスできます。
- モジュールの外でグローバル変数を XNUMX 回だけ宣言する必要があります。
- 一貫性を維持するのに役立つため、「定数」を格納するために理想的に使用されます。
- グローバル変数は、複数の関数が同じデータにアクセスする場合に便利です。
ローカル変数を使用する利点
- ローカル変数を使用すると、タスクの実行中に変数の値がそのまま維持されることが保証されます。
- 複数のタスクが同時に実行されている単一の変数を変更すると、結果は予測できない可能性があります。ただし、それをローカル変数として宣言すると、各タスクがローカル変数の独自のインスタンスを作成するため、この問題は解決されます。
- ローカル変数は、宣言された関数でのみ認識されるため、異なる関数で同じ名前を付けることができます。
- ローカル変数は関数が終了するとすぐに削除され、ローカル変数が占有しているメモリ空間を解放します。
グローバル変数を使用するデメリット
- グローバルとして宣言された変数が多すぎると、プログラムの実行が完了するまでメモリ内に残ります。 これにより、メモリ不足の問題が発生する可能性があります。
- データはどの関数でも変更できます。 プログラム内に記述されたステートメントは、グローバル変数の値を変更する可能性があります。 これにより、マルチタスク環境では予期しない結果が生じる可能性があります。
- コードのリファクタリングによりグローバル変数が廃止された場合は、グローバル変数が呼び出されるすべてのモジュールを変更する必要があります。
ローカル変数を使用するデメリット
- ローカル変数のデバッグプロセスは非常に注意が必要です。
- モジュール間でデータを共有できないため、共通データを繰り返し渡す必要があります。
- 範囲は非常に限られています。
もっと便利なものは何でしょうか?
ローカル変数とグローバル変数は、どの言語でプログラムを作成する場合でも同様に重要です。 ただし、多数のグローバル変数が大量のメモリを占有する可能性があります。 グローバル変数への望ましくない変更を特定するのが難しくなります。 したがって、不要なグローバル変数の宣言は避けることをお勧めします。