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

Commit 00a9776

Browse files
committed
refactoring
1 parent da1b602 commit 00a9776

File tree

1 file changed

+42
-28
lines changed

1 file changed

+42
-28
lines changed

books/refactoring.md

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ const main = () => {
309309

310310
- リファクタリングという武器を手にすると:
311311
- 現時点で判明している最低限の要件を満たすだけの、最もシンプルなコードを書きさえすればよい
312-
- 将来のために変に柔軟性を持たせたりしない
312+
- 将来のために変に柔軟性を持たせたりしなくてすむ
313313
- e.g. 関数に無駄にたくさん引数持たせるなど
314314
- Yagni = You ain't going to need it = どうせ使わねえよ
315315
- リファクタリングできるんだから、必要になった段階で変更すれば足りる
@@ -324,13 +324,13 @@ const main = () => {
324324
- ソフトウェアがいつでもリリース可能な状態であること
325325
- リファクタリング
326326
- コアプラクティスがもたらすもの
327-
- Yagni を実践できる
328327
- リリースを素早くできる
329328
- リリースのリスクを減らせる
330329
- リリースの技術的制約が減る
331330
- アイディアを最速で顧客に届けられる
332331
- ソフトウェアの信頼性を高める
333332
- 修正に時間のかかるバグを減らせる
333+
- Yagni を実践できる
334334
- アジャイル開発の必要条件
335335
- コアプラクティスが全て実践されていること
336336
- メンバーが:
@@ -343,61 +343,75 @@ const main = () => {
343343
パフォーマンス最適化には 3 つの方法がある
344344

345345
- 実行スケジューリングする方法
346-
- 時間やメモリ使用量といった制約を与えて開発する
346+
- 実行時間やメモリ使用量の制約を与えたうえで開発する
347347
- ハードリアルタイムシステム向き
348-
- パフォーマンスを常に気にしながら開発する方法
348+
- パフォーマンスを**常に**気にしながら開発する方法
349349
- この方法はあまりうまくいかない。なぜなら:
350-
- パフォーマンスはごく一部のコードが引き起こすので、均等に努力しても大半は無駄に終わる
350+
- パフォーマンス問題はごく一部のコードが引き起こすので、均等に努力しても大半は無駄に終わる
351351
- パフォーマンス最適化のためのコードが至るところに散らばる
352352
- コードがわかりにくくなる
353-
- きれいに作って後でチューニングする方法
353+
- きれいに作って**後で**チューニングする方法
354354
- まずはプログラムをきれいにつくる
355355
- この際パフォーマンスは気にしない
356356
- チューニングの段階まできたら以下を行う
357-
- プロファイラによる計測
358-
- ホットスポットを探し出し、集中的に最適化
359-
- この際、なるべく小さなステップを積み重ねるようにすること(コンパイル->テスト->計測)
357+
- プロファイラによる計測をする
358+
- 最も悪影響を及ぼしている箇所から順に最適化していく
359+
- この際、なるべく小さくステップを積み重ねること(コンパイル->テスト->計測)
360360
- 短期的にはパフォーマンス悪化があるかもしれないが、チューニング段階からは加速し、最終的には最短で目的を達成できる方法である
361361

362362
## コードの不吉な匂い
363363

364364
- リファクタを「いつ」始めるべきか?
365-
- 美意識といった曖昧な感覚ではなく匂いで判定しろ。以下、そのリスト
365+
- 美意識といった曖昧な感覚ではなく匂いで判定しろ。以下、匂いのリスト。
366366

367367
### 不可思議な名前
368368

369-
- 適切な名前付けは明快なコードにするために最も重要、だけど難しい
370-
- 良い名前付けができれば
369+
- 名前付けの対象
370+
- 関数名
371+
- 変数名
372+
- フィールド名
373+
- 適切な名前付けは:
374+
- 明快なコードにするために最も重要
375+
- 難しい
376+
- リファクタリングに置いて最も多く行われる作業
377+
- 適切な名前付けがでできれば:
371378
- コードがずっとシンプルになる
372379
- 将来の時間を大きく節約できる
373-
- 良い名前付けができないときは、問題を理解できていない兆候
380+
- 適切な名前付けができないときは問題を理解できていない兆候
374381

375382
### 重複したコード
376383

377384
- 似ているけど違う部分はないかという間違い探しを毎回やる羽目になる
385+
- 複数メソッドに同じ式がある時
386+
- `関数の抽出 p112`
387+
- 似ているけど完全に同一ではない時
388+
- `ステートメントのスライド p231`で似た箇所を寄せておく。せめて。
389+
- サブクラスに重複したコードがある時
390+
- `メソッドの引き上げ p358`
378391

379392
### 長い関数
380393

381-
- 小さな関数の寿命は最も長い
382-
- 自己記述性、共有性、選択可能性が高いから
394+
- 小さな関数の寿命は最も長い。なぜなら以下が高いから。
395+
- 自己記述性
396+
- 共有性
397+
- 選択可能性
383398
- 関数の分割をすると読むときのオーバーヘッドが増えないか?
384-
- 関数名をわかりやすくして対処する
399+
- 関数名をわかりやすくすれば増えない
385400
- そうすれば中身を読まずに読み進められる
386401
- コードが何をするのかという「意図」を表す名前をつける
387402
- コードが長くなっても意図が明確になれば良し
388403
- やること
389-
- `関数の抽出 p112` (コレが 99%)
390-
- 以下を関数に抽出してわかりやすい名前をつけていく
391-
- 重複コードなど、まとめられる箇所
392-
- コメントがある部分(≒ わかりにくいコード)
393-
- 例え 1 行でも躊躇しない
394-
- パラメータや一時関数が多すぎる場合
395-
- `問い合わせによる一時変数の置き換え p185`
396-
- 引数が多すぎる場合
397-
- `パラメータオブジェクトの導入 p146`
398-
- `オブジェクトそのものの受け渡し p327`
399-
- それでも一時変数やパラメータが残る場合
400-
- `コマンドによる関数の置き換え p345`
404+
- 重複コード、まとめられるコード、コメントがあるコード(≒ わかりにくいコード)がある場合
405+
- `関数の抽出 p112` (コレが 99%)
406+
- わかりやすい名前をつけていくこと
407+
- 例えコードが 1 行でも必要なら抽出を躊躇しないこと
408+
- パラメータや一時関数が多すぎる場合
409+
- `問い合わせによる一時変数の置き換え p185`
410+
- 引数が多すぎる場合
411+
- `パラメータオブジェクトの導入 p146`
412+
- `オブジェクトそのものの受け渡し p327`
413+
- それでも一時変数やパラメータが残る場合
414+
- `コマンドによる関数の置き換え p345`
401415
- 条件分岐やループには`条件記述の分解 p268`
402416
- 巨大な switch 文があるなら、分岐後の各処理を`関数の抽出 p112`
403417
- 同じような構造の swtch 文が複数あるなら、`ポリモーフィズムによる条件記述の置き換え p279`

0 commit comments

Comments
 (0)