2007年09月10日
グローバルメモリー領域
昨日に引き続いて、メモリーからの読み込み、書き込みを説明して行きたいと思います。
先日の中で、説明したことの一番の問題は、同時に書き込むことでした。
そして、読み込みを不可能にすると、さらに効率が悪くなってしまいます。
ただこれは、永久についてまわる問題です。上手にルール化して実行しなければなりません。
では、これから少しずつ、実際のルール化を説明して行きます。
まず最初に、メモリー空間のアサイン(フォーマット)が必要になります。
プログラムでいうところの、グローバルな保存領域なのか、プライベート領域なのか?
現実で例えるなら、公共的なものか、私的なものか、この2つを明確に定義しなければなりません。
つぎにそれぞれ、読み込み動作、書き込みの動作が可能なのか、しっかり決めることです。
また、これによって、プログラムの流れや構造が決まってきます。
そして先日のファイルは、グローバルで共有する領域で、さらに読み込みも、書き込みも可能な状態です。
もう一度まとめますと、下記の4つになります。
①グローバルな保存領域(メモリー)
②プライベートな保存領域(メモリー)
③読み込み(動作)
④書き込み(動作)
これら4つを、時間軸の流れのなかで、実際の仕組みを認識できるように成りましょう。
では、実際のプログラムを、書いてみますと。 ※ファイルをダウンロードして実行できます。※EXCEL のVBA を実行して下さい。
Public file_1 As String '① グローバルな変数 |
Sub main() file_1 = "グローバルなファイルです。" '①+④ prg_a End Sub |
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にご協力をお願いします。↓↓↓
投稿者 shiozumi : 01:54 | コメント (1) | トラックバック (0)
コメント
Sub main()で変数file2に代入した後に、file1 = file2という具合に入れ替えるのはダメですか?
こんにちは、塩住です。
ここでのポイントは、
メイン関数と、サブ関数の独立性です。
file_1 変数が、メイン関数と、サブ関数の両方に使用されています。
この場合は、file_1の変数名を、変更した場合に、
修正する箇所が、2つになってしまいます。
こういった、プログラム関数を、100個作ってしまうと、修正も100箇所に、増えてしまいますよね。
これを防ぐために、メイン関数で、file_1 を変更しても、
サブ関数(ここでは、prg_a)を変更しなくても、良いようにするのが、ここで覚えて欲しかったことなのです。
投稿者 Anonymous : 2007年09月16日 17:00