ようこそ。睡眠不足なプログラマのチラ裏です。

重複したコード

プログラミングの鉄則 : 重複したコードを避ける。

ソリューション内に、同じようなコードが2箇所以上で見られた場合、
そのコードを1箇所にまとめることを意識すると自然と良いプログラムに近づく。
少なくとも、悪いプログラムからは遠ざかる。重複したコードで最もよく見受けられるのは、
同一クラス内の複数メソッドに同じ式があるものだろう。
この場合、メソッドの抽出を行い、各メソッドの内部で抽出したメソッドを呼ぶようにすればOK牧場。



重複したコードが複数のサブクラスに存在する場合は、メソッドの引き上げ*1を行うとよい。
もしも、コードが完全に同じではなく、似通っているだけの場合には、メソッドの抽出を行い、
共通に使える部分とそうではない部分を分離する必要がある。
また、複数のメソッドが同じ処理を異なるアルゴリズムで実装していたならば、
よりわかりやすい方を選択し、アルゴリズムの統一を図るとよいだろう。



まったく関係のない2つのクラス間で重複したコードが見られるときには、
まず、クラスの抽出*2を行い、新たなクラスへ処理を委譲するようにするとよい。
もともと存在するどちらか片方のクラスにメソッドを定義する場合もあれば、新たに第3のクラスを定義し、
それに対して委譲する方がいい場合もあるだろう。まあ、その辺はケースバイケースである。
メソッドをどこで定義すると最も意味があるのかを良く考えれば、おのずと答えはみえてくる。


プログラマは、「重複するコードが他の所にあってはならない!」と、
断言できることを目指すことが大事。というか、重複したら気持ち悪いじゃんという話。
安易でアホなコピペ開発はデスマをまねく死のロード。注意されたし。

*1:同じ結果をもたらすメソッドが複数のサブクラスに存在するとき、それらをスーパークラスに移動し統合すること。

*2:クラスの責任を切り離す方法を決め、新たなクラスを抽出し、そのクラスに対して元クラスからリンクを張ること。