Unity初心者講座:変数のスコープ・for文

2021年10月8日

変数は宣言する場所によって有効範囲があります。これを変数のスコープと言います。スコープを無視した参照をした場合、基本的にはエラーが発生しますが、奇跡的なプログラムを書いてしまうと、バグに気づきにくい原因となりますのでしっかり覚えておきましょう。また、繰り返しの処理を行う場合によく使われるfor文も合わせて覚えましょう。

変数のスコープ

変数は宣言をした以降で使えると言いましたが、実際には宣言をしたブロック内までしか使うことが出来ません。ブロックというのは{}のようなカギカッコでくくられたもので、階層のような関係を持っています。if分も条件に一致した中は一つのブロックになっています。

以下のプログラムに2つの変数を用意しました。

    {
		int x = 0;
		if( x == 0)
		{
			int y = 1;
			Debug.Log(x);
			Debug.Log(y);
		}
	}

このプログラムのxの取れるスコープは

    {
		int x = 0;
		if( x == 0)
		{
			int y = 1;
			Debug.Log(x);
			Debug.Log(y);
		}
	}

このようになります。これはxがとり得るブロックの一番低い場所で宣言されているため、カッコ以外の全域で使えます。一方yのスコープはこのようになります。

    {
		int x = 0;
		if( x == 0)
		{
			int y = 1;
			Debug.Log(x);
			Debug.Log(y);
		}
	}

yはカギカッコが一つ低い場所に設定されているため、xより狭い範囲しか取ることが出来ません。それ以外の場所でyを使おうとしても、エラーが発生して使うことが出来ません。

for文

for文とは、ある条件からそれるまで何度も同じ処理を行うのに向いています。for文では、繰り返しに使う変数の初期化・終了判定処理・ループごとの更新処理の3つを設定する必要があります。フローチャートだと、以下のように表されます。

まぁこういうのを見てもぱっと来ないのでプログラムだとどう表現されるか見てみたいと思います。例えば、「九九の2の段(2×9まで)を表示するプログラム」を作る場合、以下のようになります。

		for( int i = 1 ; i < 10; i++)
		{
			Debug.Log(2 * i);
		}

これで2の段が表示されます。for文では先程の3つの項目(繰り返しに使う変数の初期化・終了判定処理・ループごとの更新処理)が設定されていますが、もう少しわかりやすく分けるとこのようになります。

初期化や条件式についてはいろいろなテクニックがありますが、まずはこの形が基本ですのでこれらの扱いをマスターすると良いでしょう。今回は九九表示で1を代入していますっが、0を代入する方を見かけることが多いと思います。プログラマーは0から始めたがる、そういう生き物です。

また、更新処理を未入力だったり、条件から永遠に外れないような場合、無限ループに入りますので注意が必要です。

まとめ

今回はスコープとfor文について勉強しました。実践でもよく使われる知識なので、繰り返し処理をするときはまずfor文を思い出すのが良いでしょう。他のループ処理もありますがfor文で完結できるように作るのがわりと安全なプログラム設計になっていると思って良いでしょう。