Don’t Repeat Yourself
繰り返すな
同じことは同じ場所に、ただひとつだけ存在すべき。二重化をしない。
どんなときに使える?
分かりやすい例:コピー&ペーストプログラミング
コピペするなぁーーーーーーーーーー!
真っ先にこれです。コピペ=コピー&ペースト。
コーディングする。おなじようなコードがこっちにもある。コピーしてそのまま貼り付ける…
同じようなコードがそこらじゅうに溢れます。直すときは全部直さないといけない。メンテナンスがたいへん。
OAOO原則
コピー&ペーストプログラミング禁止は、OAOO原則とも呼ばれます。
OAOO:Once And Only Once 一度だけ、たった一度だけ
同じコードは二回以上書くな、ということです。
二重化はコピペだけではない
名著「達人プログラマー」では、二重化が発生するパターンとして以下をあげています。
- コードの二重化
- ドキュメントの二重化
- 開発者間の二重化
このうち、コードの二重化は、コピー&ペーストプログラミングの話です。
やっかいなのは「ドキュメントの二重化」と「開発者間の二重化」です。
二重化の罠(1)ドキュメントの二重化
コードとコメント
コードとコメントの二重化、の話です。
「プログラムコード内にコメントを書く」のは大事ですが、プログラムと全く同じことをコメントに書く人がいます。
// indexに1を足す
index = index + 1;
処理と同じことをコメントに書くなぁーーーー!
それでも内容あっていればまだよいです。
プログラム改修を重ねるうちに、やってることとコメント違うんだけど、が起こります。
// indexに1を足す
index = index + 2;
これがやっかい。特に日本人な我々は、どうしてもコメントに目がいき、ミスリードを誘うのです。ここは前と変わっていないなと。。
コメントは必ず見直す(もしくはいらない)
プログラムを改修する際は、かならずコメントも見直してください。
レビューアもチェックが必要です。コードを説明するだけのコメントなら消したほうがいいです。
二重化の罠(2)開発者間の二重化
同じ機能を複数人が開発
複数の機能で、同じような処理が必要になる場合があります。特に、通信やDBアクセスといった、低レイヤーの処理は、どの機能も使うことが多いでしょう。
こういった共通的な処理を、複数の異なるプログラマーが開発してしまうといったことが度々起こります。
これが開発者間の二重化です。(そしてたいていそれは、同じ処理と思えないほど中身が違う)
設計から見直そう
これは、設計から見直すべき問題です。このような二重化に遭遇したら、すみやかに設計にフィードバックしましょう。
また、コンウェイの法則に則って、チーム構成を見直すのも有効です。
DRYの反対はWET
DRY(Don’t Repeat Yourself)の反対の概念として、WETがあります。
- WET(Write Everything Twice)毎回だぶって書く
DRYの反対でWET。まあ、そういいたかっただけだろう、感はありますが。
コピー&ペーストプログラミングしている人に「君のそのコードはWETだねぇ」と…いや余計なことは言わないほうがよいでしょう。
まとめ
二重化の問題は、あとで取り返そうと思っても、どうにもならない問題になりがちです。
大量の不毛なコピープログラム、という負の資産を生み出します。
問題に気付いた時点で、早め早めに手を打ちましょう。
コメント