コードの再利用の注意点2006年10月11日 15時11分41秒

普段はコードの再利用は出来る限り推奨される。また、コードの行数も少ない方がバグも入りづらくてよい。しかし、コードと原理は簡単でも一つの関数で扱える動作の種類が多くなりすぎると混乱の元になることもある。

以前に、一つの関数が二十通り以上もの動作をする関数を書いたことがある。行なう作業自体は、普通の人が見ると似ても似つかない作業なのであるが、綺麗にまとめるとほぼ同じ行程で作業が出来るのである。それこそ、コードの再利用の王道を行く実装だろう。

例として、友達を訪問することにしよう。訪問したら、一緒に音楽を聞いたり、映画を観たりするかも知れない。もしかしたら、ツーリングにでも出るのかも知れないし、スポーツをするのかも知れない。スポーツであれば道具も必要になるし、競技によってはもっと誘わなくてはならない。今回の関数は、そういった、たくさんの事を出来る関数である。

しかし、どれを選んでも「友達と遊ぶ」というのは変わり無いのである。子どもは、友達と遊んで来ると言って出かけるのであって、友達の家に行って、ジュースを飲んで、サッカーをやりに他の友達の家に行って来るなどとは到底言わないであろう。

そのような、たくさんの事を処理する関数を他の人が拡張すると言ったのである。ここの処理は単純だが、総合的な処理は理解するのに少々時間が必要かも知れないと警告はしたが、動作しなくなった。もともと、その実装は、この関数にはそぐわないと忠告もしたが、それでも変更したのであった。

今回の例えで言うならば、ついでだから学校に行くという動作も実装してしまえといったところだろう。家から外に出るという点では同じだが、流石に準備や目的、活動内容などが、まとめるには違いすぎている。悪ガキもいる学校に行って来るといって反対する親はいないだろうが、悪ガキのところに行って遊んで来るとなると、何も言わない親はいないだろう。少々乱暴な例になった。

そして、実際のコードに変更が加えられた後から、何かがおかしいのである。既にこの時点で、関数の名前やらファイルの名前やらが変えられていて、cvs ではうまく変更を追えなくなっていた。他にも、全体的に変更が入っていて、自分が書いた覚えのある残骸が至るところに見受けられるが、やはり違うのである。cvs 以外でソースコード管理をしていても、ドングリの背い比べではあっただろう。また、そのコードを観ていると、動かないのではとの違和感があった。やはり、案の定だったのである。

そして、それを直そうとして他の人もどんどん手を加えたのである。

まず、第一の問題はどこが、どのように動作していないのかよく分からない。そして、他の人達が何をやろうとしたかもとても掴みづらい。そして、自分のコードの影は見受けられるが、手が大量に入りすぎている。

融通と拡張が効きすぎると、厄介になることもあるものだと思ったのだった。