Web/DB プログラミング徹底解説

ホーム > ソフトウェア開発に関する考察 > 同じ意味のコードとデータは一箇所にまとめよう

同じ意味のコードとデータは一箇所にまとめよう

経験的に大原則は次の二つです。

  • 同じ意味のコードは一箇所にしかないようにする
  • 同じ意味のデータは一箇所にしかないようにする
これが守られれば、コードの変更及び修正はだいぶ楽になります。 逆に、これが守られていないとコードの変更及び修正は悲惨なことになります。

「同じ意味のコードを一箇所に」ということを例を挙げて説明しましょう。 きわめて簡単なことです。例えば、価格や通貨に関する数字をフォーマットする関数があるとします。 つまり、

2500



$2,500

にフォーマットするような関数を作ったとします。しかし後日、小数点二桁の表示も 必要になり、

2500



$2,500.00

に変更しないと いけません。もしこのときにあるひとつの関数でこのフォーマットが行われていれば、 上記の変更は全くもって簡単なことです。何しろひとつの関数を直すだけですから。

「同じ意味のコード (=通貨のフォーマット) を一箇所にまとめて」いるプログラムであれば、 ひとつのファンクションを直せば、全体がすっきり書き換わるはずです。 しかし同じ意味のコードを一箇所にまとめていないプログラムでは、ここのフォームは 直ったけど、あちらは違う、こちらも直っていない、などとムラが出てしまいます。 この例のように単なる表示ですとデータ破損などの大きな問題につながることはないでしょうが、 大切な計算 (税金の計算等) ではたちまちデータが壊れてしまいます。

実際の現場では意外と、同じことをするコードをあちこちにコピペしてしまうことがあります。 関数の名前や置き場所についてあれこれ悩むより、その場その場にコードを埋め込む方が楽だからです。 特に納期が迫っているときなど、気持ちに圧力がかかっているときに、機械的に処理できるコピペの誘惑は強まります。

さらに、他人が書いたコードを直すときなど、なんとなく変更が恐ろしいと感じてしまう時には、 しばしば新しく関数を書いても全体をひとつのファンクションで置き換えることをためらいがちです。 しかし、コピペされている箇所はファンクションで置き換えましょう。 よくある言い訳は「この箇所はすでにテストされているので、変更は加えるべきではない」 ということでしょうが、安易なコードのコピペを許容していくとたちまち保守性の悪いコードに変質してしまいます。

これだけ心がけられればデータ、コード両面において、

「この共通のコード・データを、開発者皆が使えるようになるためにはどういう構成だったらいいだろう?」

と配慮できるようになるでしょう。