第5講 プロシージャ(1)
第9話 スコープ限定の意義
マイクロソフトは最近、Googleやアマゾン・アップルに圧されていて、
少し影が薄くなっていますが、
今から5年ぐらい前までは、
世界で最も成功したIT会社でした。
アメリカの司法省から、独占禁止法違反であるから、
分割を命じられてしまうほど、
破竹の勢いがありました。
OSの9割を独占して、
ほとんどのパソコンにはワードやエクセルがプレインストールされていました。
その成功の糸口になったのが、
ビル・ゲイツが学生時代に開発したプログラム言語BASICにあったのです。
しかし、BASICはC言語との戦いに敗れました。
私は、プログラミングはBASICからはじめましたし、
今でもVisual BasicやVBAを愛用しています。
ビル・ゲイツもBASICに最後まで愛着を持っていたと言われます。
さて、なぜBASICが破れたのでしょうか。
それは、BASICでプログラミングするとスパゲティプログラムになってしまうからです。
BASICにもサブルーチン(部品)という考え方がありました。
しかし、BASICが用意する変数はサブルーチンに限定されずに、
すべてのサブルーチンで共通でした。
変数のスコープはプログラム全体に及んでいました。
ということは、変数の値がどこかのサブルーチンで勝手に書き換えられてしまう心配があります。
しかも、GOTO文というのが用意されていて、
あちらこちらのサブルーチンに飛んだり、
サブルーチン内であっちっこちに飛びました。
スパゲッティプログラムと揶揄されたのは、
あっちこっちに飛び混線していたからです。
そうすると、プログラムは常にプログラム全体を見ていなければなりません。
いちいちサブルーチンのプログラムコードも1行1行読まなければならないのです。
C言語では、他の関数で勝手に値が書き換えられてしまう心配がありませんから、
プログラマーは他の関数の中身を知らなくても、
関数の開発をすることが出来ました。
つまり、分業が可能だったのです。
他の関数の開発は、
他の人に頼み自分は自分の関数の開発のみに専念できるわけです。
スコープが関数内に限定されているために、
関数の組み立ては、プラモデルの部品を組むように、
非常にシンプルです。
プラモデルの部品はせいぜい数カ所でつながっているだけの単純結合です。
人間の内臓や脳などはシナプスで複雑につながっているだけではなく、
ホルモンを通して臓器同士がコミュニケーションを取っていることが、
医学の発展でわかってきています。
脳が一括管理する中央集権的な体制ではなく、
各臓器同士がネットワークを組み会話しながら進めていく地方分権的なシステムであることがわかってきたのです。
人間の臓器の結合は、Web(蜘蛛の巣)のように複雑です。
かつてのBASICの結合もそれと似て複雑な結合だったのです。
独立した部品(スコープが関数内に限定されているため)を単純に結合することを、
構造化プログラミングと呼びました。
構造化プログラミングの思想が徹底していた言語が、
C言語であり、パスカルだったのです。
そして、VBはC言語の良い点を学んだのです。
構造化プログラミングの最大の利点は、プログラミングがわかりやすくなることです。
さて、引き数名が異なっていてもよいという謎にはまだ答えていません。
その謎に次話で答えて第5講は終了します。