前回は、関数まで説明しました。

今回は、「変数のスコープ」です。スコープとは、変数の有効な範囲のことです。プログラムからはそのスコープ内にある変数しか使用できません。スコープ外にプログラムが移るとその変数は破棄されたりします。

プログラムでいう範囲の大きさを書きますと、
グローバル変数 > クラス内変数 > 関数内変数 > 条件または繰り返し文内変数・・・
と、なります。

※ クラスの変数は、「アクセス修飾子」で範囲が変わるのでクラスの説明を参照ください。


さっそく例を見てみましょう。

C#

using System;
    class ScopeTest
    {
        public static int glo = 1;/*グローバル変数*/
        private static int mem = 2;/*メンバー変数*/
        static void Main()
        {
            int fnc = 3; /* 関数内だけの変数 */
            for (int i=0; i <= 2; i++)
            {
                int loop = 4; /* 繰り返し内だけの変数 */
                if (loop == 4)
                {
                   int jyo = Hoge(); /* 条件内だけの変数 */
                    Console.WriteLine("jyo={0}",jyo);
                }
                Console.WriteLine("loop={0}", loop);
            }
            Console.WriteLine("fnc={0}", fnc);
            Console.WriteLine("mem={0}", mem);
            Console.WriteLine("glo={0}", glo);
            Console.ReadLine(); // プログラムをここでストップさせるためのもの
        }
        static int Hoge()
        {
            int fnc = 5;
            return fnc;
        }

    }

出力結果

jyo=5
loop=4
jyo=5
loop=4
jyo=5
loop=4
fnc=3
mem=2
glo=1

それほど難しいものではないと思いますが、スコープ範囲外で変数を使おうとすると、コンパイルエラーとなり実行できないと思います。

条件内や繰り返し文内の変数はその中でしか使用することができません。繰り返し文内の変数は2度目プログラムがくると初期化されてしまいます。

同じスコープ内で同じ名前の変数を持つことができません。スコープが別だとプログラム上同じ変数名をつけられます。

簡単ですが以上です。
次回は、構造体を説明します。