プリンシプルプログラミング プログラミング

【POP5】DRYの原則

はじめに

この記事は「プリンシプルオブプログラミング 3年目までに身につけたい一生役立つ101の原理原則」を読んだ際に記した議事録です。

著作権の関係により、詳細には書きません。詳しい詳細を知りたい方はぜひ本書を読んでみてください。

プリンシプルオブプログラミングをPOPと訳します。

 

DRY ・・・ Don't Repeat Yourself.

繰り返すな

What : コードのコピペはアウト

そのまんまの意味で、コピペをしてはいけませんよってことです。安易にコピペしてしまうと、同じロジックが複数箇所に存在してしまいます。

同様の条件を扱うような制御分のブロック群が、様々な場所に現れてしまうこともあります。

また、純粋なコードの重複ではありませんが、単にコードを説明しているだけのコメントアウトも重複に当たります。

Why : コードが改善不可になってしまう

障害修正や機能追加などする際にぐちゃぐちゃなコードでは改善することが困難になってしまいます。具体的には以下のような困難が発生します。

コードを読むのが難しくなる

コードに重複があると、量的に「より多く」、質的に「より複雑」になります。そのため読むのが難しくなります。

コードの修正が難しくなる

似たようなコードがある場合、修正が複数箇所になり、その全てを正確に修正しなければ全体として整合が取れません。

エラーの温床になってしまいます。

 

修正箇所を力技で改善したとしても、さらに汚くなります。それらのコードの末路は「修正できないコード」になってしまいます。

Haw : コードを抽象化しよう

抽象化により、重複を排除します。

ロジックを抽象化する方法は、似たような処理のまとまりに名前をつけて「関数化」「モジュール化」します。データであれば名前をつけて「定数化」します。

しかし、抽象化には時間がかかり、デグレードのリスクさえあります。しかし、そのようなリスクを鑑みても重複は排除するべきです。

発展

DRYをどこまで適用させる?

DRYはコードのみならず、ソフトウェア開発全てに適用できます。例えば「同じことの繰り返し」についてもDRYを適用するべきです。

DRYとプログラミング技術

プログラミング技術はDRYを適用するための機能を持っています。オブジェクト指向言語において例えると、関数化や継承(インヘリスタンス)、多態性(ポリモーフィズム)です。

また、言語のみならず、設計手法にもデザインパターンがあります。それらの技術や手法は目的を持って編み出されています。手法や技術を学際は、テクニックのみを暗記するのではなく、目的を意識することが習得への近道です。

DRYを違反せざる得ないタイミング

異なる抽象化スタイルの境目です。その際たる例は、「オブジェクト指向プログラミングのクラス」と「リレーショナルデータベースのテーブル」です。

対策としては情報を一か所に集中させてそこから他の情報を自動生成させる仕組みを作れば、情報を一元管理できます。

関連

WET

「Write Every Time」の略。「同じことを繰り返している」という意味が込められており、皮肉な表現として使われる。

One Fact in One Place

通称OFOP。「一つの事実は一つの場所のみに存在させる」という意味で、DB論理設計における、テーブル設計の要となる原則です。

実現させるためには「正規化」を用います。

Once and in Only Once

通称OAOO。「一度だけ、たった一度だけ」という意味です。要は「重複を含ませてはいかんよ」ということです。

レガシーコード

テストがないコードのこと。

終わりに

この記事ではプリンシプルオブプログラミング 3年目までに身につけたい一生役立つ101の原理原則の議事録を自分用に記しています。

この記事ではカバーしきれていない部分も多いので、是非本書を手にとって読んでみてください。

次回、「【POP6】YAGNI」です。ぜひ、次の記事も読んでみてください。

  • この記事を書いた人
  • 最新記事

ミッチー

小中高と野球漬けの毎日 ▶︎ 大学時に自分が何もできないことに気づき、プログラミング学習開始 ▶︎ PCは疎かったがめげずに継続 ▶︎ 受託で案件を頂きながら、オーダースーツ事業に、通販事業にも参戦 ▶︎ 東証一部Web系自社開発企業にエンジニアとして内定。

-プリンシプルプログラミング, プログラミング

© 2022 オミチャンネル Powered by AFFINGER5