【プリンシプルオブプログラミング】7つの原則
目次
はじめに
この記事は「プリンシプルオブプログラミング」を読んで自分なりにまとめた学習メモです。
プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則
- 作者: 上田勲
- 出版社/メーカー: 秀和システム
- 発売日: 2016/03/23
- メディア: 単行本
- この商品を含むブログ (11件) を見る
原則 〜プログラミングのガイドライン〜
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.
オープン・クローズドの原則
開放・閉鎖原則
- 意味:コードの変更は波及させない
- つまり:コードにインタフェースを用いる
- 参考:https://medium.com/eureka-engineering/go-open-closed-principle-977f1b5d3db0
名前重要
Naming is important.
- 意味:コードで命名は最重要課題
- つまり:第三者視点に立ってコードの意図が正確に伝わるように命名する
- 具体的に:
- 明確な単語を選ぶ
- tmp や retval などの汎用的な名前を避ける
- 具体的な名前を使って、物事を詳細に説明する
- 変数名に大切な情報を追加する
- スコープの大きな変数には長い名前をつける
- 大文字やアンダースコアなどに意味を含める
- 参考:
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)