---
# System prepended metadata

title: 重構的時機與實作｜五行程式碼規則 CH2

---

# CH2

###### tags: `Refactor` `Book`
<i class="fa fa-book fa-fw"></i> 重構的時機與實作｜五行程式碼規則
<br/>

深入了解重構的原理
---
:::info
:bulb:重構的目的是讓程式碼更好、不改變其功用。
:::


### :eyes: **那什麼是好的程式碼呢？**
1. 可讀性 (Readability)

    - 容易清楚知道程式碼在做什麼？
    - 什麼是==好讀==的函式？那==難讀==的函式？
    
    <br/>
    
    ![image alt](https://memezila.com/wp-content/Code-comments-be-like-this-is-a-stop-sign-meme-1022.png =400x400)

2. 可維護性 (Maintainability)

     - 修改錯誤或加入新功能，如何==安全、快速、輕鬆==地修改？
         
        - 可維護性就表示需要調查的程度
     
     - 系統脆弱 (systems fragile)

        - 修改推薦功能，導致付款系統出問題？
        - 脆弱性的根源通常是「==全域狀態==」
        - 不變條件是怎麼破壞的

### :eyes: **維護程式碼但沒有變更原本的功用**

1. 程式碼視為黑盒子

2. 重構的三大基石

    - 清晰表達意圖提高==可讀性==
    - 局部化不變條件提高==可維護性==
    - 不影響關注範圍之外程式碼完成以上兩點。

### :eyes: **善用組合而非繼承**

1. 大部分的重構模式和規則，都是用來協助程式使用==物件組合==
    
    - 範例：企鵝是不會飛的鳥類
    - 彈性：就像玩樂高積木一樣
        <br/>
        ![image](https://hackmd.io/_uploads/Sk7Hj7IU6.png)
        <br/>

2. 以新增而不是修改的方式來變更程式碼

    - 組合好處是透過==新增附加的方式來變更==系統

### :eyes: **以「重構」當作學習的方法**

1. 重構就像許多事情一樣，需要花費時間來學習，然後就習慣了？


### 領域

1. 通常會有==使用者==和==專家==，還會有自己的語言和文化。

### 討論

:one: 你不是沒時間重構，你就是都不重構才會沒時間？