読んだ本
「プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則」
この記事では、3章の プログラミングセオリー について記載します。
プログラミングセオリー
A theory of programming
どういうこと?
プログラミングの最大の関心事は「最高のコード」を作りあげること。
最高のコードとは、「拡張方法が多く存在し、余分な要素が存在せず、読みやすく、理解しやすい」コード。
最高のコードを実現するための「セオリー(確立された方法)」がある
プログラミングセオリーを支える3つの価値
- コミュニケーション(コードも人に見せる「文章」である)
- シンプル
- 柔軟性
プログラミングセオリーを実現する6つの原則
- 結果の局所化
- 繰り返しの最小化
- ロジックとデータの一体化
- 対称性
- 宣言型の表現
- 変更頻度
原則1: 結果の局所化
どういうこと?
- 変更の影響が局所に留まるようにコードを構成する
- 結果が局所化されていないと、ある部分の変更が全く別の部分に影響して、変更コストが急増する
どうすれば?
- 関係性の高いコードを集約してモジュール化(部品)する
モジュールとは何か?
モジュールとは、プログラミングにおいて関連するコードをひとまとめにした単位です。コードを小さな部品に分割し、それぞれが独立して機能するように設計することができます。
参考: https://zenn.dev/yoojiyang/articles/3ac641e20ec05d
原則2: 繰り返しの最小化
どういうこと?
- 重複を極力排除する
- 繰り返しのコードは「結果の局所化」原則を侵害し、変更コストを増大させる
どうすれば?
コードをたくさんの小さい部分に分割する
原則3: ロジックとデータの一体化
どういうこと?
- ロジックとロジックが操作するデータを互いに近くに置くようにする
- コードを修正する場合、ロジックとそのロジックが操作するデータは、大抵同じタイミングで変更するため
どうすれば?
- ロジックとデータをコード上で近くに配置する
原則4: 対称性
どういうこと?
- コードに一貫性を持たせる
どうすれば?
- 同じ種類のもの、つまり同質なものは、同じレベルで表現する。
- 「追加」メソッドがあれば、対になる「削除」メソッドを作成する
- あるモジュール内のデータは、すべて生存期間が同じであるようにする
原則5: 宣言型の表現
どういうこと?
- コードの意図を伝えようとする時、できるだけ「命令型」よりも「宣言型」で表現する
- 命令型のコードは、常に状態・制御・データフローを頭に描かないと、事実を正確に理解できない。そのため、流れを追いながら読まなければならない。
宣言型プログラミング
何をするかが明確に宣言(記述)されている
命令型プログラミング
どのように実行させるかを記述
参考:https://qiita.com/Jungle-King/items/75bce55427285d7c6aae
どうすれば?
- 宣言型のコードを取り入れ、シンプルに意図を表現する
原則6: 変更頻度
どういうこと?
- 変更理由でグルーピングする
- コードを修正するタイミング(変更頻度)が同じ。つまり、変更理由が同じ。
- 変更理由が1つであることは、関連性の高いコードが集合している事になる(=高い凝集性を満たしている)。変更対象範囲が狭く、影響範囲も狭くなるので、修正しやすいコード。
どうすれば?
- 変更するタイミングが同じ要素は同じ場所に置く
- 変更理由や頻度が同じものを集めれば、自ずと「単一責任の原則」を満たすモジュールが出来上がる