第7講 結果を報告しない社員
第7話 箱が生きている時間
前話問題
2つのプログラムにおける箱の生きている時間
Private Sub CommandButton1_Click()
wa
seki
End Sub
Private Sub CommandButton2_Click()
Rows("6:200").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
Sub wa()
Dim w As Long, i As Byte
w = 0
For i = 1 To 10
w = w + i
Next
Cells(6, 1) = "1から10までの和"
Cells(6, 3) = w
End Sub
Sub seki()
Dim w As Long, i As Byte
w = 1
For i = 1 To 10
w = w * i
Next
Cells(7, 1) = "1から10までの積"
Cells(7, 3) = w
End Sub
の場合の解答
実際の時間順(プログラムの流れる順)
Private Sub CommandButton1_Click()
wa
seki
End Sub
Dim w As Long, i As Byte
Private Sub CommandButton1_Click()
wa
seki
End Sub
Private Sub CommandButton2_Click()
Rows("6:200").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
Sub wa()
w = 0
For i = 1 To 10
w = w + i
Next
Cells(6, 1) = "1から10までの和"
Cells(6, 3) = w
End Sub
Sub seki()
w = 1
For i = 1 To 10
w = w * i
Next
Cells(7, 1) = "1から10までの積"
Cells(7, 3) = w
End Sub
の場合の解答
図にすると、グローバルの場合メモリーを無駄に消費していることがわかります。
グローバル変数の場合は、最初から最後までメモリー上に箱が存在しているのに対して、
ローカル変数の場合は、必要に応じてメモリーに存在しています。
グローバルの場合、劇の上演中常に舞台に上がっているのに対して
ローカルの場合は、役者(社員)が舞台に上がって、箱を生まれよと呪文を言った瞬間に舞台に登場し、
役者(社員)が舞台から降りるときに、一緒に舞台から降ります。
というより、役者が箱を持って降りるといった方が正確です。
箱は、手品師の箱のように、箱を作った役者(社員)が常に手にしているものです。
ですから、役者が舞台から降りれば、自動的に箱も舞台から降りてしまうわけです。
メモリーの節約の観点から、なるべくグローバル変数は用いないようにした方がよいことがわかります。
実際上の社長(親分)CommandButton1_Clickが社員(子分)に命じる例ばかりを見てきましたが、
社員も他の社員に仕事を命じる(お願いする)こともできます。
プログラムの文章を次のように変更してみましょう。
Private Sub CommandButton1_Click()
wa
End Sub
Private Sub CommandButton2_Click()
Rows("6:200").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
Sub wa()
Dim w As Long, i As Byte
w = 0
For i = 1 To 10
w = w + i
Next
Cells(6, 1) = "1から10までの和"
Cells(6, 3) = w
seki
End Sub
Sub seki()
Dim w As Long, i As Byte
w = 1
For i = 1 To 10
w = w * i
Next
Cells(7, 1) = "1から10までの積"
Cells(7, 3) = w
End Sub
実行結果を予想してください。
第6話へ 第8話へ
vc++講義へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義へ
VB講義基礎へ
初心者のためのJava 入門 基礎から応用まで
数学研究室に戻る