【プリンシプルオブプログラミング】7つの原則

 

目次

はじめに

この記事は「プリンシプルオブプログラミング」を読んで自分なりにまとめた学習メモです。 

原則 〜プログラミングのガイドライン

7つの原則

  • KISS
  • DRY
  • YAGNI
  • PIE
  • SLAP
  • OCP
  • 名前重要

 

KISS

Keep It Simple, Stupid.

シンプルにしておけ、愚か者よ。

Keep It Short and Simple.

簡潔かつ単純にしておけ。

  • 意味:コードをシンプルに保つ
  • つまり:「動作させるために、もっともシンプルなものは何か」と常に問いかけ、コードに余計なことをしない
  • やってはいけないこと:
    • 新しく覚えた技術を使いたいがために、不要にトリッキーなコードを書いてしまうこと
    • 将来の必要に備えたいという考えで、過剰なコードを書いてしまうこと
    • 勝手に要件を判断し、余計なコードを加えてしまうこと

 

DRY

Don't Repeat Yourself.

繰り返すな。

  • 意味:コードのコピペ厳禁
  • つまり:コードを抽象化して、重複を排除する
  • 簡単な例:
   alert("スパゲッティが食べたい!");
   alert("チョコレートムースが食べたい!");
   function SwedishChef( food )
   {
       alert(food + "が食べたい!");
   }
   
   SwedishChef("スパゲッティ");
   SwedishChef("チョコレートムース");

 

YAGNI

You Aren't Going to Need It.

それはきっと必要にならない。

  • 意味:コードは必要最低限
  • つまり:汎用性のもたらす再利用性や拡張性よりも、まず「使える」ことに価値を置くよう単純性を考える

 

PIE

Program Intently and Expressively.

意図を表現してプログラミングせよ。

  • 意味:コードの意図を伝える
  • つまり:コードは「書きやすさ」よりも「読みやすさ」が最優先

まず、コードを比較してみる

return exponent >= 0 ? mantissa * (1 << exponent) : mantissa / (1 << -exponent)
if(exponent >= 0) {
    return mantissa * (1 << exponent);
} else {
  return mantissa / (1 << -exponent);
}

前者は簡潔で書きやすいコードだが、後者のほうが読みやすくて安心できる。

「簡潔」と「安心」はどちらを選ぶべきだろうか?

答えは、「安心」です。

プログラムの動作を把握するには、コードを読むしかない。「コードを書く時間」より「コードを読む時間」の方がずっと多い。

よって、第三者が理解しやすいコードを書くべき。

 

参考:

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

 

SLAP

Single Level of Abstraction Principle.

抽象化レベルの統一。

  • 意味:コードのレベルを合わせる
  • つまり:関数を構造化してレベルを揃える
  • 高水準、低水準:
    • 高水準なコード:Publicで外部公開されたメソッド、ユーザ側、外向けのコード
    • 低水準なコード:Privateで非公開のメソッド、より内部的なコード
  • レイヤの階層構造:
    • ユーザーの操作を受ける最上位レイヤ
    • 最上位レイヤが持つモデルクラスの公開メソッドとなる第2レイヤ
    • モデルクラスの公開メソッド内で呼び出される実際の処理の第3レイヤ
    • 実際の処理の中で呼び出されるライブラリの関数となる第4レイヤ
  • 参考:https://qiita.com/TSKGunGun/items/7b09d8a6f6623d67daa6

 

OCP

Open-Closed Principle.

オープン・クローズドの原則

開放・閉鎖原則

 

名前重要

Naming is important.

  • 意味:コードで命名は最重要課題
  • つまり:第三者視点に立ってコードの意図が正確に伝わるように命名する
  • 具体的に:
    • 明確な単語を選ぶ
    • tmp や retval などの汎用的な名前を避ける
    • 具体的な名前を使って、物事を詳細に説明する
    • 変数名に大切な情報を追加する
    • スコープの大きな変数には長い名前をつける
    • 大文字やアンダースコアなどに意味を含める
  • 参考:

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)