【プリンシプルオブプログラミング】プログラミングセオリー

 

目次

はじめに

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

思想 〜プログラミングのイデオロギー

プログラミングセオリー

「最高のコード」の定義

最高のコードとは、「拡張方法が多く存在し、余分な要素が存在せず、読みやすく、理解しやすい」コードのこと。

 

プログラミングセオリーを支える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を使っていないメソッド
...
}

 

 対称性

同じ種類のもの、つまり同質なものは、同じレベルで表現する。

  • 「追加」メソッドがあれば、対になる「削除」メソッドを作成
  • あるグループにある関数は、同じ引数を取るようにする
  • あるモジュール内のデータは、すべて生存期間が同じであるようにする
  • ある関数内で、呼び出し関数の抽象度は同じレベルとする

 

宣言型の表現

コードの意図を伝えようとする時、できるだけ「命令型」よりも「宣言型」で表現する。 

 

変更頻度

変更するタイミングが同じ要素は同じ場所に、違う要素は違う場所に置く。