サブルーチン禁止!? |
||
|
あるプロジェクトで、似たような動作をする複数のプログラムを作らなければならなかったとします。そういうときは、似ている部分や同じ部分をサブルーチンにして、ライブラリか何かにしますよね。ところが、サブルーチン化が禁止されているプロジェクトがあるという話をときどき耳にします。そういうプロジェクトでは次のように作業を進めます。 |
||
|
||
このやり方には次のようなメリットがあるんだそうです:
私には、まったく意味が分かりません・・・。 |
||
|
そもそもサブルーチン化するのは、同じ部分を1つにまとめておくためです。そうすることによって、全部のプログラムで必要になった修正を1度で済ませることができるわけです。あったり前ですよねぇ。 |
||
|
では、先ほどのメリット1はどういう意味でしょう?たぶんプログラムを修正するときにこれまでの機能を保証するかどうかという点が問題なのでしょう。いままでと互換性のない修正を行うときに、その修正がほかのプログラムに波及するのはまずいというわけです。うーん、何か変ですよね。 |
||
|
サブルーチンにしておけば、自動的に全部のプログラムに修正結果が反映されるのが良い点だったはずです。ですから、リリース後のサブルーチンに何かバグが見つかった場合の修正が簡単になります。そのかわり、一度リリースされたサブルーチンの機能を変更することはできません(拡張は可能ですが)。機能変更が必要な場合は、既存のものを残しつつ、新しいルーチンを用意することになります。このように、今までの機能を保証しつつ修正する場合と、機能自体を変える場合の違いを明確にする必要があります。この違いを理解していないと、上記のメリット1のようなおかしなことになりだすのでしょう。 |
||
|
メリット2についてはもう言いようがないですね。サブルーチンにしておいたほうが「もっと楽」ですから。 |
||
|
上記の誤った作業方針の変わりに、訂正版を作ってみました。
|
||
これには次のようなメリットがあります:
|
||
|
さてと、上で述べたようなことは、わかっている人にとってはアクビが出るほど当たり前のことですね。それがどうしてサブルーチン化禁止などというばかげた方針になってしまうのでしょう?何か事情というか、そうならざるを得なかった理由があるのかもしれません。 |
||
|
推測ですが、たぶん品質管理上の問題ではないかと思います。たとえばプログラムAが呼び出しているサブルーチンにバグがあって、これを修正したとします。そのとき同じサブルーチンをプログラムBも使っていたとします。サブルーチンの修正を正しく行えば問題ありません。しかしもし修正を間違ったらその影響が関係ないはずのプログラムBにも及ぶわけです。あるいは、これは本当にばかげた話ですが、プログラムBの機能がサブルーチンのバグに依存していたかもしれません(その場合は、プログラムAにとってのバグ修正がプログラムBにとっては機能変更ということになってしまいます。うあぁぁっ!!!)。 |
||
|
だとすると、サブルーチンを使うなと言いたくなる管理者の気持ちも理解できるような気がします。コストをかけて質の高い人材を育成するよりも、一人一人の質が低いことを前提として人材の量を活かした方が楽だったのでしょう。 |
||
| いけませんねぇ、そんなことでは。 | ||
|
|
(「コーディングの向こう側」は2000年4月から2001年5月にかけて作成されたコンテンツです。)