第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言語であり、C++やパスカルだったのです。
そして、VBとC#はここから学んだのです。
後から出来た言語の方が、
それ以前の言語の良い点を取り入れるので、
よりよくなります。
C#は最新の言語の1つですから、
C言語などを超える部分をたくさん持っているわけです。
構造化プログラミングの最大の利点は、プログラミングがわかりやすくなることです。
さて、引き数名が異なっていてもよいという謎にはまだ答えていません。
その謎に次話で答えて第5講は終了します。