---
# System prepended metadata

title: Clean Code - Ch03 函式
tags: [Clean Code, Book]

---

# Clean Code - Ch03 函式

## 1. 簡短
funtion不應該大到包含巢狀結構，應該只做一件事，而且只把這件事情做好
## 2. 如果function內容就是使用Switch的情況，可以改成用Factory取代
``` csharp
switch (param) {
    case "example1":
        result = new Calc();
        break;
}

switch (param) {
    case "example1":
        result = this.Calc();
        break;
}
```
## 3. 取名要貼近實際的功能，不要太發散或不相關
## 4. function不要在參數帶bool去決定工作內容，應該要把它分成2個function
## 5. function盡量不要帶太多參數，這樣會造成閱讀時需要關注更多的部份以及使得function變得更肥
## 6. function應該要沒有副作用
假設function叫做CheckUserExist，那它裡面應該就要只有判斷式，而不該有其他動作，ex.改變數據、取得數據等等，因為這樣容易使得數據變得不可信賴
## 7. 應該盡量避免讓function有response，因為這樣會需要去看function才能確定到底是丟了什麼東西回來，他自己去改變自己的狀態比較好
``` csharp
EmailContent = this.appendString(params)
vs
EmailContent.AppendString(params)
```
> 但我覺得這要看程式的架構怎麼訂，不是每個都適用
## 8. 用exception取代response error message
這樣做不但可以把不同的邏輯抽離出來也可以讓code變得簡潔
``` csharp
if (doSomething1() == true) {
    if(doSomething2() == true) {
        Exec();
    } else {
        LogError();
    }
} else {
    LogError();
}
↓
try {
    doSomething1();
    doSomething2();
    Exec();
}
catch {
    LogError();
}
```
## 9. try/catch 應該跟程式邏輯分開，不該混和在一起
``` csharp
try {
    Exec()
}
catch (Exception ex) {
    LogError()
}
```
## 10. DRY原則 - Dont Repeat Yourself 不要重複自己
[DRY - Don't Repeat Yourself](https://zh.wikipedia.org/wiki/%E4%B8%80%E6%AC%A1%E4%B8%94%E4%BB%85%E4%B8%80%E6%AC%A1)

###### tags: `Clean Code` `Book`