---
# System prepended metadata

title: Clean Code ch4 part2
tags: [clean code]

---

# Clean Code ch4 part2
###### tags: `clean code`
### 抽象原則
> 每一個抽象背後都是**隱藏複雜性**的簡化槓桿。（抽象塔）
#### 編寫程式的抽象規則：
> 實作應（複雜）與介面（簡化）分開
    
:::info
在**最大程度的簡化**和**最大程度的發揮作用**中取得一種平衡，即抽象原則追求的目標。
:::

##### 抽象化不足 🍓
- **不要重複自己**（Don't Repeat yourself，**DRY**）
##### 過度抽象化 🥝
 - **你將不需要它**（You aren't gonna need it，**YAGNI**）
 - **保持簡單和愚蠢**（Keep it simple, stupid，**KISS**）

### 函數式程式設計原則 🥑
> 使用**函數**和**不可變狀態**來實現目標。
##### 函數純度 pure function 🍅
> 函式的回傳值僅從輸出值得出，沒有副作用。
- 可預測性 Predictability
- 可測試性 Testability
##### 不可變性 🍋
> 資料不應該被改變（eg. const）