【プリンシプルオブプログラミング】プログラミングセオリー
目次
はじめに
この記事は「プリンシプルオブプログラミング」を読んで自分なりにまとめた学習メモです。
プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則
- 作者: 上田勲
- 出版社/メーカー: 秀和システム
- 発売日: 2016/03/23
- メディア: 単行本
- この商品を含むブログ (11件) を見る
思想 〜プログラミングのイデオロギー〜
プログラミングセオリー
「最高のコード」の定義
最高のコードとは、「拡張方法が多く存在し、余分な要素が存在せず、読みやすく、理解しやすい」コードのこと。
プログラミングセオリーを支える3つの価値
最高のコードを実現するために、プログラミングには「セオリー」があり、セオリーは3つの「価値」に支えられている。
- コミュニケーション:「他の人はこのコードを見てどう感じるだろう?」と考える
- シンプル:「余分な複雑性」を取り除く
- 柔軟性:拡張しやすく、かつ、その拡張がほかに波及しないような設計を心がける
プログラミングセオリーを実現する6つの原則
価値と実際のプログラミングの架け橋となる、6つの「原則」がある。
- 結果の局所化
- 繰り返しの最小化
- ロジックとデータの一体化
- 対称性
- 宣言型の表現
- 変更頻度
結果の局所化
結果 = 変更の影響
つまり、「結果の局所化」とは、「変更の影響が、局所に留まるようにコードを構成する」ということ。関係性の高いコードを密集させ、関係性の低いコード同士が依存しないようなコードにする。
繰り返しの最小化
重複したロジックを関数化して、一つにまとめて共有コードとして使用できるようにする。
string yamada = "山田";
string tanaka = "田中";
string taro = "太郎";
System.out.println("おはよう。" + yamada);
System.out.println("おはよう。" + tanaka);
System.out.println("おはよう。" + taro);
string yamada = "山田";
string tanaka = "田中";
string taro = "太郎";
method(yamada);
method(tanaka);
method(taro);
// 出力処理を一つにまとめる
void method(String name) {
System.out.println("おはよう" + name);
}
ロジックとデータの一体化
「ロジック」と「ロジックが操作するデータ」を、互い近くに置く。
class Sample {
string str; // ロジックが操作するデータ
void method1() {
str = ...;
method2();
}
void method2() {
// strを使っている
}
// strを使っていないメソッド
...
}
対称性
同じ種類のもの、つまり同質なものは、同じレベルで表現する。
- 「追加」メソッドがあれば、対になる「削除」メソッドを作成
- あるグループにある関数は、同じ引数を取るようにする
- あるモジュール内のデータは、すべて生存期間が同じであるようにする
- ある関数内で、呼び出し関数の抽象度は同じレベルとする
宣言型の表現
コードの意図を伝えようとする時、できるだけ「命令型」よりも「宣言型」で表現する。
変更頻度
変更するタイミングが同じ要素は同じ場所に、違う要素は違う場所に置く。