ハマログ

株式会社イーツー・インフォの社員ブログ

プログラミングの法則

こんにちは、かねこです。

まえがき

世の中にはプログラミングの法則というものがありまして、知っていると知らないでは、コーディングの効率性や保守性に大きな差が出るような代物なので、代表的なやつを書いてみよう。

で、これが言われてみれば当たり前のことなのですが、時間や制約との戦いの中でコードかいてるとしれーっと知らないフリをしてしまったりするのです。
人間て困ったもんだ。

KISS

Keep it simple, stupid!(シンプルにしておけバーカバーカ!)ということで、不必要な複雑さは排除しましょうということです。

これは、ソフトウェア界隈の言葉だと思ってたんだけど、Wikipediaを見ると、かなり昔の1900年代前半くらいに、戦闘機設計の世界で生み出された言葉だった。

あたりまえのことだけど、意識していないと意外と忘れてしまうのです。

Wikipedia

DRY

こちらは、Don’t repeat yourself(繰り返しちゃだめ!)てことです。コピペしたらダメよ。

DRY原則を意識しつつ、どの部分をあえて冗長化するかというところが腕のみせどころであります。

Wikipedia

YAGNI

You ain’t gonna need it!(そんなもん作っても、必要にならねぇ)です。将来使うかも!って思っても我慢して、使うときに書きましょう。
このあたりは、Javaの標準API作ってる人たちとかすごいなーと思うところですね。

書いたけど使わなくなったメソッドも、きちんと消しましょう。過去の遺産はCVSがきちんと管理していてくれるのです。

Wikipedia

開放閉鎖原則

別名、オープン・クローズドの原則。拡張に対して開いており、修正に対しては閉じていなさいという原則です。オブジェクト指向の大原則で、カプセル化・ポリモフィズムのベースになっている考え方です。

要は、OOPの場合、利用者はインタフェースのみを知っていればよく、内部構造を把握する必要がない。また、インタフェースを知っていることで、将来的な動作の変更や仕様拡張が容易になるのである(エヘン)

Wikipedia

SoC

Separation of Concerns(感心事の分離)。
これは、いろいろな観点があるのだけれど、たとえばMVCとかオブジェクト指向のクラス化とか。どのモデルに基づいてアーキテクチャを設計するかとか。そういうの。
境界を明確化した設計を心がけましょうということです。

Wikipedia

DIP

Dependency Inversion Principle(依存関係逆転の原則)

Java界隈では標準的な考え方になっているやつで、オブジェクトがそれぞれ個別にいろいろなオブジェクトを管理して強い依存を抱えるのではなく、サービスの利用時に別の誰かからオブジェクトを自動的に受け取ることで、オブジェクト同士の結びつきを切り離しましょう。という考え方です。

詳しくは、ファウラー先生の素晴らしい文章を読みましょう

COC

Convention over Configuration(設定より規約)。設計で縛ってコード内に余計な情報を持たせるよりは、規約に基づいたアーキテクチャで単純化と柔軟性の確保を図る。
RailsとかCakePHPとか。

Wikipedia

Law of Demetre

Law of Demetre (LoD, デメテル先生のありがたいおことば、と思ってたら違った。デルメルは女神様の名前らしい)。オブジェクト・コンポーネントは知らない奴には話しかけないということです。

オブジェクトが知っている奴とは具体的に、
・自分自身
・オブジェクトのメソッドが渡されたオブジェクト
・オブジェクトのメソッド内でインスタンス化したオブジェクト
・自分自身が保有しているオブジェクト

つまり、連鎖したドット(や、->とか)でメソッド呼び出すなてことですが、
最近のメソッドチェーンとかのパラダイムと反するとこがわりとあるね。ケースバイケース。

Wikipedia

90%対90%の法則

前述の一連の法則とちょっと違くて、「コード全体の90%を記述するのに10%の時間がかかり、残り10%を記述するのに90%の時間がいるよ。というありがたいお言葉です。」
最近は、最初の90%をいかに早く記述するかというところは、フレームワークが吸収してくれる部分が多くて、本流の処理に集中しやすくなっています。
ありがたやー

Wikipedia

まとめ

せっかく有用な標識があるので、見落としませんように・・・

かねこ

DRYYAGNIコーディングプログラミング原則法則

  kaneko tomo   2013年11月5日


関連記事

JenkinsとCircle CIを比較してる記事を読んでみた

はいどーも! 今、スタートアップ界隈で使っているCIといえば「Circle CI…

Laravel NotificationsでChatworkに通知する

Laravel5.3より、Notificationsという仕組みが備わったので、…

sessionStorageとは?

気づけば今年ももう6月となり、入社して半年が経ちました。 時の流れは早く、それと…


← 前の投稿

次の投稿 →