カタツムリ2007年09月10日

グローバルメモリー領域

user_20070910a.jpg

昨日に引き続いて、メモリーからの読み込み、書き込みを説明して行きたいと思います。
先日の中で、説明したことの一番の問題は、同時に書き込むことでした。
そして、読み込みを不可能にすると、さらに効率が悪くなってしまいます。

ただこれは、永久についてまわる問題です。上手にルール化して実行しなければなりません。
では、これから少しずつ、実際のルール化を説明して行きます。

まず最初に、メモリー空間のアサイン(フォーマット)が必要になります。
プログラムでいうところの、グローバルな保存領域なのか、プライベート領域なのか?
現実で例えるなら、公共的なものか、私的なものか、この2つを明確に定義しなければなりません。

つぎにそれぞれ、読み込み動作、書き込みの動作が可能なのか、しっかり決めることです。
また、これによって、プログラムの流れや構造が決まってきます。

そして先日のファイルは、グローバルで共有する領域で、さらに読み込みも、書き込みも可能な状態です。

もう一度まとめますと、下記の4つになります。

①グローバルな保存領域(メモリー)
②プライベートな保存領域(メモリー)
③読み込み(動作)
④書き込み(動作)

これら4つを、時間軸の流れのなかで、実際の仕組みを認識できるように成りましょう。

では、実際のプログラムを、書いてみますと。 ※ファイルをダウンロードして実行できます。※EXCEL のVBA を実行して下さい。





Public file_1 As String '① グローバルな変数

Sub main()

file_1 = "グローバルなファイルです。" '①+④

prg_a

prg_b

MsgBox file_1

End Sub


Sub prg_a()

file_1 = file_1 + "Aさんが変更しました。" '①+③+④

End Sub

Sub prg_b()

Dim i As Integer '② プライベートな変数

For i = 1 To 3 '// ②+③+④

file_1 = file_1 + "Bさんも" + CStr(i) + "回、変更しました。" '①+③+④

Next i

End Sub

ここで、String 型で、file_1 という変数を、グローバルで宣言しております。

また、prg_a は、Aさんの、読み込み、書き込みの動作で、

prg_b は、BAさんの、読み込み、書き込みの動作です。

この手順ならば、両者の変更は、繁栄されますので、

結果は、下記のようになるでしょう。

グローバルなファイルです。
Aさんが変更しました。
Bさんも1回、変更しました。
Bさんも2回、変更しました。
Bさんも3回、変更しました。

たった、これだけの事ではありますが、

①②③④を明確に意識して見て下さい。

実はプログラムで陥るバグの初歩的なものは、プログラムが増えていったとき、このルールが乱れてきます。

人間なので、プログラムの量が増えたり、昔のことになると、忘れたり勘違いしたりします。

従って、ルールを決めるときは、極力シンプルにして下さい。複雑にしてはいけません。

もし分からなくなってきたら、整理整頓して下さい。

削れるところは、極力削除して、並べられるものは、キッチリ順番に並べる。

そして、決めたルールを守り続けることが、よりよいプログラミングの秘訣だと覚えて下さい。


さてここで、今日の問題です。

ここで、file_1 = "グローバルなファイルです。"

を、file_2 = "グローバルなファイルです。" に変更したとします。

その場合、prg_a も、prg_b も変更する必要が出てきます。

prg_a も、prg_b も変更しないで、正常に動作させるためには、最初からプログラムを変更する必要があります。最初から、書き直して見て下さい。


ツイッターはじめました~フォロー待ってま~す!!
↓↓↓下記の3つのバナーをクリックして下さい。ランキングUPにご協力をお願いします。↓↓↓

にほんブログ村 経営ブログへランキングUP!

ランキングUP!

banner2.gif 人気blogランキング!

投稿者 shiozumi : 01:54 | コメント (1) | トラックバック (0)

このエントリーのトラックバックURL

http://blog.e-smile.ne.jp/cgi-bin/mt/mt-tb.cgi/49

コメント

Sub main()で変数file2に代入した後に、file1 = file2という具合に入れ替えるのはダメですか?

こんにちは、塩住です。

ここでのポイントは、
メイン関数と、サブ関数の独立性です。
file_1 変数が、メイン関数と、サブ関数の両方に使用されています。

この場合は、file_1の変数名を、変更した場合に、
修正する箇所が、2つになってしまいます。

こういった、プログラム関数を、100個作ってしまうと、修正も100箇所に、増えてしまいますよね。

これを防ぐために、メイン関数で、file_1 を変更しても、
サブ関数(ここでは、prg_a)を変更しなくても、良いようにするのが、ここで覚えて欲しかったことなのです。

投稿者 Anonymous : 2007年09月16日 17:00