変数のスコープ

<< Click to Display Table of Contents >>

マニュアル > スクリプトガイド > スクリプトVer2(SC2構文) >

変数のスコープ

スコープとは

スコープとは、変数の有効範囲のことを指します。変数の宣言をスクリプト内のどの場所で行うかによって、変数のスコープが決まります。

 

スコープは大きく分けて、対象の変数がブランケット(“{”と“}”)で囲まれた範囲内にあるのか否かによって、スクリプトコードからアクセスできる(スコープ内)、アクセスできない(スコープ外)が異なってきます。

 

ここで、ブランケット内に定義された変数のことを、「ローカル変数」と呼びます。

また、ブランケットの範囲外、つまり関数やイベントの外側で定義された変数のことを「グローバル変数」と呼びます。

 

 

ローカル変数について

ローカル変数とは、イベントやユーザー定義関数内で宣言された変数で、ブランケット(“{”と“}”)で囲まれた範囲の中だけで有効な変数です。

 

以下の場合、変数「a」はOnInitializeイベントの中で実行され、イベントが終了すると「a」は存在しなくなります。よって、外部オブジェクトから「a」に対して値を設定したり、値を取得したりすることはできません。

 

event OnInitialize()
{
	var a = "Hello"; 
}

 

以下の場合、変数「b」はif文の中で宣言されています。この場合のスコープはif文の内側のみとなり、if文の外では「b」は存在しません。

従って、たとえ同じイベント内であってもスコープ外では参照エラーとなります。

 

event OnInitialize()
{
	var a;

	if (a == 1)
	{
		var b = 123;
		b = b + 1;	//有効
	}
	
	b = b + 5;		//エラー
}

 

上例の様に、スコープ内で宣言された変数はスコープ内のみで有効です。また、1つのスコープ内で重複した変数名を宣言することはできません。

 

 

hint

if文に関する詳細は、「条件分岐/繰り返し(ステートメント)」を参照してください。

 

 

グローバル変数について

イベントやユーザー定義関数のブランケットの外側で宣言した変数は、グローバル変数となります。グローバル変数は、複数のイベントや関数から共通的にアクセスすることができる変数です。

 

例1)スクリプトVer2アクションのスクリプトでグローバル変数を宣言した例

 

var a;		// グローバル変数の宣言

event OnInitialize()
{
	a = 1;
}

 

グローバル変数は関数やイベントから共通的にアクセスすることができます。

 

例2)上記例1のグローバル変数へのアクセス

 

var a;

event OnInitialize()
{
	a = 1;
}

event OnHeartBeat()
{
	a = a + 1;
}