【プリンシプルオブプログラミング】7つの設計原理
目次
はじめに
この記事は「プリンシプルオブプログラミング」を読んで自分なりにまとめた学習メモです。
プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則
- 作者: 上田勲
- 出版社/メーカー: 秀和システム
- 発売日: 2016/03/23
- メディア: 単行本
- この商品を含むブログ (11件) を見る
思想 〜プログラミングのイデオロギー〜
7つの設計原理
7つの設計原理とは、障害を作り込まないために考慮すべき、コード構造上の7つの核心観点のこと。
「どうしたら開発時に障害を作り込まないようにできたか」という観点から根本原因を分析して、その結果、導かれた原理。
- 単純原理
- 同型原理
- 対称原理
- 階層原理
- 線形原理
- 透明原理
- 明証原理
- 安全原理
単純原理
単純原理とは、「シンプルにこだわる」という原理。
極論、プログラミングの初心者でも読めるよう、一貫して単純なコードを書くようにする。
そのために、複雑で全体的な関連性を重視するのではなく、局所的な完全性を重視するようにする。
【意識すべきこと】
自然なコードを心がける。高級なテクニックを使わず、単純なやり方で通すようにする。むやみにコードを複雑化、肥大化せずに、単純で小さいままに保つ。
同型原理
同型原理とは、「形にこだわる」という原理。
同じことは、同じように扱うことにこだわる。
例えば、あるモジュールにおいて、そこで扱う数値の単位が統一されていたり、公開関数の引数の数が統一されていたり、使用順序が統一されていたりすること。
【意識すべきこと】
コードに一貫性を持たせる。
自分の実力をアピールするため、他の部分との一貫性など無視して、スマートで独創的なコードを書く人がいる。コードは堅牢でシンプルにしておかなければならないのに、ほとんど無意識に、複雑なものにしてしまう。自己満足には、高品質なコードほどの重要性はない。独創性を抑制し、一貫性を優先する。
対称原理
対称原理とは、「形の対称性にこだわる」という原理。
上があれば下、左があれば右、アクティブがあればパッシブというような、対称性にこたわる。
【意識すべきこと】
- 条件の対称性:制御条件に整合性を持たせるため、反条件の整合性も検討する。
- 例外の対称性:例外的な状況を考慮しつつ、それを極力排除する。特殊なケースがあまりにも多い場合、要求を見直し、コードから例外的状況を出来るだけ排除する。
- 命名の対称性:「set/get」「start/stop」「begin/end」「push/pop」
階層原理
階層原理とは、「構造が階層であることにこだわる」という原理。
物事の主従関係、前後関係、本末関係など、階層関係を常に意識し、整理された関係性を構築する。階層ごとに処理を取り決め、同じ種類の処理が異なる階層間に渡らないことが重要。リソースの獲得を行ったら、同じ階層でリソースの解放を行う。
【意識すべきこと】
コードの各々について、抽象レベルを意識して、階層構造を構築する。1つの階層は、同じ抽象レベルのものだけで構成する。
また、上位から見た時に、下位レベルは、「それを外部から見ている」ような視点で記述する。上位レベルの、下位レベルを呼び出すコードがわかりやすくなる。
線形原理、透明原理
線形原理とは、「処理の流れは直線であることにこだわる」という原理。
透明原理とは、「見通しがよいことにこだわる」という原理。
ある機能は、いくつかの機能の重ね合わせによって実現されている(線形結合的である)のが、シンプルでよい構造。
逆に、スイッチでコードを制御したり、状態の数をむやみに増やしたりすると、コードがわかりにくくなる。このようなことを避け、コードの見通しをよくする。
【意識すべきこと】
処理の分岐を少なくする。処理の流れを直線的に読めるようなコードにする。
そのためには、特殊な振る舞いを、主処理に混ぜて書かないようにすること。処理の一貫性やルートにこだわり、時にコードを俯瞰して、複雑となっていないことを確認する。
また、保守していくうちに複雑になりすぎたものに関しては、再構築することも視野に入れる。自分だけではなく、後に続く人のためにも、明確で堅牢な設計にしておくことを心がける。
明証原理
明証原理とは、「ロジックの明証性にこだわる」という原理。
明証性とは、はっきりと証明すること。つまり、一見して明らかに正しい、と言えるようなコードを書くこと。
【意識すべきこと】
ロジックは直感的でわかりやすいものにする。コードを読んでいる人が疑問に思うようなことは、排除するか、コメントしておく。
また、すぐにそれとわかる、誰でも同じことを想像できる用語を使うようにする。特に、意味のない変数名などを使わないように気を付ける。
安全原理
安全原理とは、「安全性にこだわる」という原理。
必然性のないところや曖昧なところは、安全サイドで設計・プログラミングしておくこと。
これは、ありえないという条件をあえて考慮して、コードを書くということ。
【例】
- あるif文に対して、ありえないと思いつつもelse文を考慮する
- あるcase文に対して、ありえないと思いつつもdefault句を考慮する
- ある変数に対して、ありえないと思いつつもNULLチェックを行ったりする
【意識すべきこと】
すべての動作を洗い出し、それぞれが安全になるよう考慮する。要件を理解し、機能を理解し、場合分けをコードに正しくブレイクダウンできると、ソフトウェアが安全に動作する確率が高くなる。
ただし、人によってブレが出てはいけないので、コードを書く前に、ある程度規約として定めておくようにする。