Software Design - Code Smell - Side Effect

Quick Chat

副作用(Side Effect)指的是一段程式在執行後,除了回傳值之外還影響了外部狀態

在錯誤的位置或缺乏揭露的情況下使用副作用,會造成:

  • 函式不可預測
  • 測試困難
  • 程式閱讀成本上升
  • Bug 躲藏不易察覺

Bad Examples

function getUserName(user) {
  saveLog(user);           // 副作用:寫入外部 log
  notifyOthers(user.name); // 副作用:發送通知
  return user.name;
}

Extras

很多時候副作用可能是無法規避的,因此重點不在「禁止副作用」,而是「把副作用設計得可控、可觀測、可預期」。

較健康的副作用處理策略:

  • 明確命名:像 updateState, notifyUser, logError
  • 設計邊界:像 useEffect、controller 層 專職處理副作用