変数の適用範囲

・丁半さいころゲーム(掛け金の累計を表示)

これまでの内容がきちんと分かっている人は、ちょっと難しいかもしれないけど、是非知っていて欲しい内容です。
知っていると例えばC言語などの別のプログラムでも非常に役に立つ「ジェネラルプロシージャと変数の適用範囲」について、簡単な説明を記しておきます。但し、申し訳ありませんが、詳細、具体例などについては割愛しますので、参考書などを参照してください。説明を読み、自分できちんと理解するという練習にもなるはずです。
なお、わからい部分があれば是非聞いてください。

○変数の適用範囲

複数のプロシージャを組み合わせて利用した場合、変数の使い方に注意する必要がある。

例えば、あるプロシージャで利用する変数は、実は他のプロシージャでは利用できない。
つまり、折角計算し記憶した変数の内容が、別のプロシージャでは利用できないということで非常に不便な場合がある。一方で各プロシージャ内で他のプロシージャを全く気にすることなく独自にプログラムを作成できるという大きなメリットがある。このように変数は、利用できる範囲があり、これを適用範囲、スコープと呼ぶ。

例えば、ボタン1で宣言した変数は、ボタン2では参照など利用できない。一方両方で同じ名前の変数xを宣言したとしても、名前は同じだがお互いは全く無関係である。

また、例えばボタン1で、Dim xと宣言し、x=x+1というプログラムをしたとしても、ボタン1をクリックするたびに、変数xは宣言しなおされて初期化されてしまうので、ボタンを押すたびにxは次々と増えてはくれない。
このことは、例えば、賭けをするプログラムにおいて、自分の所持金を持ち越すことができないことを意味する。

これに対し、(Form1)-(Declarations)に宣言した変数は、(同じモジュール内の)全てのプロシージャで共通して利用できる。
よって、全てで利用したい変数がある場合は、この(Form1)-(Declarations)で宣言すると良い。
(Form1)-(Declarations)に宣言命令を書くには、コードウィンドウのプロシージャ名の部分をクリックして、「(General)」を選択すればよい。

FormのDeclarationsに変数などを宣言する場合、
「Private Sub Button1_Click(ByVal sender ・・・」という通常プログラムするボタンのクリックの部分のすぐ上に、例えば
Dim xxx
などと記載すればよい。このように宣言した変数は、各プロシージャにおいて同じ名前の変数を宣言すべきではない。

詳細などについては各種Webページなどを参照してください。

○Sub/Functionプロシージャ

プロシージャは、いわゆる一つのプログラムであり、例えば二つのコマンドボタンにそれぞれに書いたプログラムの各一つをプロシージャと呼びます。

正確には、今まで作成してきたプロシージャは、ボタンのClickイベントプロシージャと呼ばれるものです。
つまりボタンがクリックされた際に動作するプログラム(プロシージャ)です。
イベントはオブジェクトによって色々なあり、クリックされる以外にも、Changeイベントなど多々ある。

このようなイベントプロシージャの他に、ジェネラルプロシージャというものが存在し、他のC言語などの多くでは「関数」や「サブルーチン」などと呼ばれるものに対応する。少し本格的なプログラムを作成しようとすると、関数、つまりVBでいうジェネラルプロシージャは、非常に重要となる。
イベントプロシージャと違ってジェネラルプロシージャは、ユーザの何らかのアクションによって実行されるのではなく、プログラマが通常のプログラムの中で利用するものである。
ジェネラルプロシージャは、いわゆる下請け工場のようなもので、同じような処理を何回もしたいような場合などに利用し、プログラムから適宜呼び出して利用することができる。また、プログラムが長くなると間違いやすく、また分かりにくくなり、ジェネラルプロシージャを利用することにより、これらを解消することもできる。

VBにおけるジェネラルには、Subプロシージャと、Functionプロシージャの二つの種類がある。

詳細などについては参考書などを参照してください。

★丁半さいころゲームへの応用具体例(持ち点の繰り越し)


[「C班」プログラミング基礎のTopに戻る]