読書会でまとめたものになります

10章 無関係の下位問題を抽出する P129

#キーとなる考え方

無関係な下位問題を抽出することだ
つまりプロジェクト固有のコードから汎用コードを分離することだ
以下に考え方を記載する
1. 関数やコードブロックをみて、このコードの高レベルの目標は何か?を自問自答する
2. コードの各行に対して高レベルの目標に直接的に効果があるのか?あるいは無関係の
 下位問題を解決しているのか?自問自答する
3.無関係の下位問題を解決しているコードが相当量あれば、それらを抽出して別の関数にする 
 
##入門的な例
このコードの高レベルの目標は何かを考える
→低レベルの問題は関数かしてしまう
例 与えられた地点からもっとも近いところを探す 高レベルの目標
    その中の処理で2つの地点の球面距離を算出するは、別の関数にまとめると良い
 
##純粋なユーティリティコード
プログラムの基本的な核となるコードはライブラリにない場合、
関数にまとめる
例 ファイルの読み込みなど
 
##その他汎用コード
無関係な下位問題は関数にまとめる
 
##思いも寄らない恩恵
コードが独立している場合、修正が簡単にできる
 
##汎用コードをたくさん作ることのメリット
プロジェクトから切り離されていることによって、
横展開が可能であり、テストも簡単になる
 
##プロジェクトに特化した機能
抽出する下位問題というのはプロジェクトから完全に独立したものである方がよいが、
下位問題を別の関数にまとめることに意味がある。
 
##既存のインターフェースを簡潔にする
汚いインターフェースは自分でラッパー関数を用意して覆い隠す

##やりすぎ
やりすぎるとよくない。関数を増やすことは読むコストが増える。
他の部分から再使用できるものであれば、関数を追加することに意味があるかもしれない。
 
担当:らうみー