Skip to content
This repository was archived by the owner on Mar 20, 2023. It is now read-only.

Commit cd75b76

Browse files
committed
refactoring
1 parent aadf16b commit cd75b76

File tree

1 file changed

+43
-3
lines changed

1 file changed

+43
-3
lines changed

books/refactoring.md

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -941,7 +941,7 @@ describe('', () => {
941941

942942
- if や switch では複雑になりすぎる場合に利用を検討する
943943
- オブジェクトの種類によってコードのいたるところで条件分岐が散在している場合など
944-
- (読んだけどやはり時代遅れ感)
944+
- (読んだけどやはり時代遅れ感あり。fp ではどうやるんだろう)
945945

946946
### 特殊ケースの導入
947947

@@ -968,10 +968,50 @@ describe('', () => {
968968

969969
- 問い合わせは蓋然性が高く、どこにでも移動でき、テストも用意
970970
- 値を返すにもかかわらず、観察可能な副作用があるメソッドがあったら、必ず分離する
971-
- 観察可能 = 例えばデータ取得時にキャッシュ層で値が変わるのは観察不可能なので OK
971+
- 観察可能 = 例えばデータ取得時にキャッシュ層で値が変わるのは観察不可能なので許容される
972972

973973
### パラメータによる関数の統合
974974

975-
- ほとんど重複コードだけど使われている定数がちょっと違うだけの関数群は、定数をパラメータで与えることで、統合せよ
975+
- ほとんど重複コードな関数群があって、違いは使われている定数がちょっと違うだけの場合は、定数をパラメータで与えることで関数群を統合せよ
976976

977977
### フラグパラメータの削除
978+
979+
- フラグパラメータ(フラグ引数)は使うな
980+
- 理解しにくいから
981+
- 特に bool リテラル値は最悪
982+
- ただし bool がデータ型として与えられている場合はフラグ値とはみなさない場合もある
983+
- フラグ引数が多すぎる場合は問題を整理できていない可能性あり
984+
985+
### オブジェクトそのものの受け渡し
986+
987+
- オブジェクトから数個の値を抜き出して関数に渡しているなら、オブジェクトそのものを渡す
988+
- ただしこのリファクタをしたくないこともある
989+
- 例えば依存関係をもたせたくない場合など
990+
- そういうときは「特性の横恋慕」が疑われるので、ロジックの場所を移すべきではないか、考えてみるとよい
991+
992+
### 問い合わせによるパラメータの置き換え(またはその逆)
993+
994+
- (順)パラメータで渡すまでもなく問い合わせで計算可能なものは、削除する
995+
- (逆)関数内部で行われている問い合わせを、パラメータに置き換える
996+
- どちらがいいかは状況による
997+
- 一つ言えるのは、参照透過性(パラメータが同じなら結果が同じ)は大事だということ
998+
- よくあるパターンは、参照透過性を持つ純粋関数群を作っていき、それらをラップして副作用のある関数と組み合わせて使うというもの
999+
1000+
### setter の削除
1001+
1002+
- 不要な setter は消して可能な限りイミュータブルにしようね
1003+
1004+
### ファクトリ関数によるコンストラクタの置き換え
1005+
1006+
- コンストラクタはいろいろな制約があるからラップして使え、とのこと
1007+
- (時代遅れ感)
1008+
1009+
### コマンドによる関数の置き換え
1010+
1011+
- クラスを使うことで、入れ子関数と同じようなことを実現する
1012+
- (入れ子関数でよくないか?)
1013+
- 「関数によるコマンドの置き換え」という逆パターンもある
1014+
1015+
## 継承の取り扱い
1016+
1017+
(省略)

0 commit comments

Comments
 (0)