ローカル変数

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

ローカル変数局所変数: local variable)とは、プログラムの一部分でしか利用できない変数のことである。一般的にグローバル変数と対比される。ローカル変数の定義はプログラミング言語によって異なるので、詳細な説明は言語別の項に譲る。

Java[編集]

Javaにおける変数7種類[要出典]ある。

本項では、ローカル変数について説明する。

Javaにおいて、メソッド内で宣言されている変数をローカル変数と呼ぶ。ローカル変数のスコープは、その変数が宣言された場所からその変数が定義されたブロックを抜けるまでである。

下記の例において、3行目で宣言されているローカル変数iのスコープは3行目から7行目の中括弧までであり、5行目で宣言されているローカル変数jのスコープは5行目から6行目の中括弧までである。

1 class Foo {
2     void bar() {
3         int i = 1; // スコープの広いローカル変数
4         {
5             int j = 1; // スコープの狭いローカル変数
6         }
7     }
8 }

C言語[編集]

C言語およびC++でも、同じブロックというスコープ内からのみ参照可能なローカル変数を使うことができる。C99より前ではブロックの先頭部分でのみ定義可能だったが、C99からは任意の位置で定義可能である。

C言語のローカル変数のエクステント(寿命)は、デフォルトではその関数呼出しから抜けるまでであり、staticキーワード(静的記憶クラス指定子)を付加すると、プログラムの生存期間と同一となる。静的ローカル変数の初期化式は関数が最初に呼び出されたときに一度だけ評価され、その値によって変数は一度だけ初期化される。

C99の例を示す。(1)はC言語およびC++03までのC++ではauto int a = 0;と等価だが、C++11以降は異なる。

#include <stdio.h>

int Function1(void) {
    int a = 0; // (1) 通常のローカル変数(自動変数)の宣言と定義。初期化は関数を呼び出すたびに毎回行なわれる。
    a += 1;
    return a;
}

int Function2(void) {
    static int s = 0; // (2) 静的ローカル変数の宣言と定義。初期化は一度だけ行なわれる。
    s += 1;
    return s;
}

int main(void) {
    for (int i = 0; i < 5; ++i) {
        printf("auto(%d) = %d\n", i, Function1());
        printf("static(%d) = %d\n", i, Function2());
    }
    return 0;
}

Singleton パターンの実現に静的ローカル変数が利用されることがある。

関連項目[編集]