重複コードを避けたい2017年8月、画像の膨張・収縮アルゴリズムについて調べたときに、双方のコードの重複が気になりました。コピペしますか?重複コードを避ける簡単なコード改善から究極的なコード改善まで整理します。膨張・収縮アルゴリズム膨張処理も収縮処理も、Y座標とX座標によるラスタスキャン・ループの部分は同じコードで重複しています。実際、片方のコードはコピペして作成してしまいました。簡単なコードなので、重複していることは気になりませんし、このコードのままで良いと考えています。複雑なコードだった場合はどうでしょうか?いつまでも、コピペを続けますか?機能コードによる実装メイン・ループの処理が重複していますので、ループを一本化してみます。こんなとき、C言語の一般的プログラマーが考える方法は機能コードによる実装です。(Dilation:膨張、Erosion:収縮)を定義して、ラスタスキャン・ループの関数に渡します。ループの中では、機能コードを判定して膨張処理か収縮処理を呼びます。C++言語によるアルゴリズムコードを示します。);機能コードによる実装について直感的でとてもシンプルなソースコードになりますが、Y座標とX座標の二重ループの中で1画素ごとに機能コードの判定と画像膨張/画像収縮の関数呼び出しが発生します。ループのオーバーヘッドが気になるところです。重複コードを改善する方法にもいろいろな手法があります。ジェネリックプログラミングによる実装どの手法を採用するかは、ソースコードの保守性と実行効率のどちらが優先事項かにもよります。画像膨張・収縮のような簡単なコードの場合、無理して重複コードを除去する必要はないと考えます。もとのソースコードが一番シンプルで、実行効率も良いです。メイン・ループの処理がもっと複雑だった場合は、少し考えてしまいます。プロセッサに最適化実装して処理効率を最大限に向上させる場合は、私ならジェネリックプログラミングによる実装を採用します。画像膨張処理と画像収縮処理のメインルーチンをコピペして両方のメインループを最新状態に保守し続ける自信がないのですね。