---
# System prepended metadata

title: 控制結構
tags: [Note, Clean Code]

---

# 控制結構

控制結構：if/else類的控制語句

## 內容
- 如何避免深度嵌套的控制結構
- 錯誤處理
    - tyr/catch
    - 如何利用程式中的錯誤,而不是使用 if/else

## 乾淨的控制結構概念
- 避免深度嵌套
    - 使用工廠模式/多態
    - 使用正面檢查(更容易理解),而非反面檢查
    - 使用錯誤(Error)

## 使用守衛(Guard)並且快速失敗
守衛：
- 逐步檢查,如果檢查不通過就不會執行後續代碼
- 可以把嵌套的控制結構轉換成平行/順序化的控制結構

![](https://i.imgur.com/dgloAib.jpg)

何時需要使用守衛：
一個 if 語句下包含了很多代碼
就能用一個反向的守衛來處理這個 if 語句

## 擁抱錯誤和錯誤處理
:::info
很多開發者不會利用錯誤,並拋出足夠多的自定義錯誤
:::

拋出 + 處理錯誤可以減少 if 語句並建構更專一的函式

規則：
- 如果有東西出錯 -> 讓他拋出錯誤,而非使用 if 語句

![](https://i.imgur.com/bmpMiiY.jpg)

:::warning
錯誤處理是：“一件事“ -> 一個函式只做一件事
:::

###### tags: `Clean Code` `Note`