第5講 Subプロシージャ

第1話 構造化プログラミングの思想

いつもなら〜とは何か?から話が始まりますが、
今回は、『構造化プログラミング』という難しい言葉が表題に選ばれています。
しかも、わかりやすいと銘打っている講義で『思想』という言葉まで登場しています。
『思想』という大げさな言葉を選んだのは、
『構造化プログラミング』という考え方がとても重要だからです。

『構造化プログラミング』というと如何にも難しそうですが、
実は簡単なことです。
構造化プログラミングとは、プラモデルが独立のパーツから全体が組み立てられるように、
独立部品であるプロシージャから全体を構成しようという考え方です。

Basicは、BASIC→Quick Basic→Visual Basicと発展してきました。
BASICにも、確かにサブプログラムがありました。
ところが、BASICのSubプログラムは、ここのSubプログラムが独立していませんでした。
BASICは、メインプログラムもサブプログラムも複雑に有機的に複雑に関連していました。
ここのプログラムは、独立していないので同じ変数名を使っていると、他のサブプログラムで値が勝手に書き換えられてしまいました。
したがって、プログラマーは常に全体を見ていないと、プログラムを組むことが出来ませんでした。

それに対して、Quic BasicとVisual Basicでは、プロシージャは独立しています。
同じ変数名を使っていても、ここのプロシージャは独立していますので、
同名の変数であっても他で値が書き換えられてしまう心配がありません。
したがって、プログラマーは全体ではなくそのプロシージャのみの開発に専念すればよいのです。

昔のBASICでは、分業でプログラムを組むことは困難でした。
メインプログラムとA,B,C,Dなどのサブプログラムが、まるでWebサイトや脳細胞のように複雑に関連しあっていました。
しかも、悪しきGO To文によって、メイン→C→A→メイン→D→C→・・・のようにあちらこちらに飛び、全体が複雑に絡み合っていました。
BASICによるプログラムは、スパゲティプログラムと揶揄されていました。

それに対して、BASICと同様な歴史を持つC言語やパスカルは、構造化プログラミングの思想が徹底していました。
構造化プログラミングとは、独立部品による単純結合です。
プラモデルの部品は、せいぜい他の部品と数カ所で繋がっているだけです。
脳細胞は、シナプスを通して他のいろいろな脳細胞と有機的に関連しあっています。
Webサイトも蜘蛛の巣のように、他のサイトと複雑に絡み合っています。
単純結合とは、プラモデルの部品のように簡単に結合することです。

構造化プログラミングとは、部品A,B,C,Dなどを用意して、
A{
   ・
   ・
   ・

B{
   ・
   ・
   ・

C{
   ・
   ・
   ・

D{
   ・
   ・
   ・

メインプログラムにおいて
メイン{
   A
   B
   C
   D

のように組み立てるプログラム手法を指しています。
そして、各部品は独立しているため、例え同じ変数名を使っていたとしても、
他で書き換えられてしまう心配がありません。

皆さんは、気づかれていたでしょうか。
例えば、第4講第6話で作った成績一覧表のコードは
Private Sub CommandButton1_Click()
  
Dim i As Byte, j As Byte, w As Single
         ・
         ・
         ・
End Sub

Private Sub CommandButton2_Click()

  Range("B7:L50").Select
  Selection.ClearContents
  Cells(1, 1).Select

End Sub

Private Sub CommandButton3_Click()

  
Dim i As Byte, j As Byte

  For i = 1 To 40
    For j = 1 To 5
      Cells(6 + i, 1 + j) = Int(100 * Rnd())
    Next
  Next

End Sub


の3つはそれぞれ独立プロシージャです。
プロシージャには、FuntionプロシージャとSubプロシージャの2つがありますが、
3ともEnd Subで終わっていますので、Subプロシージャです。
つまり、成績一覧表のプログラムは、3つのSubプロシージャから組み立てられていたわけです。
独立とはどういう意味かと申しますと、
それぞれのSubプロシージャの変数は、
t001i、jは枠の中のみで有効
t002i、jは枠の中のみで有効
それぞれ枠の中のみで有効ということです。
変数は枠の中のみで有効なので、
  
Dim i As Byte, j As Byte
がPrivate Sub CommandButton1_ClickとPrivate Sub CommandButton3_Clickにおいて、
それぞれ宣言してもエラーしないわけです。
試しに、Private Sub CommandButton3_Clickにおいて2回宣言すると、
実行(プログラムを走らせること)すると、
t003とエラーします。




第4講第6話へ 第2話へ

004


vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る