不要在一個表示式中包含太多

  • 為計算單元找到有意義的名稱。
  • 使用 for comprehensions 或 map 將計算組合在一起。

假設你有這樣的事情:

if (userAuthorized.nonEmtpy) {
  makeRequest().map {
    case Success(respone) =>
      someProcessing(..)
      if (resendToUser) {
        sendToUser(...)
      }
    ...
  }
}

如果你的所有函式都返回 Either 或類似 Validation 型別,你可以寫:

for {
  user     <- authorizeUser
  response <- requestToThirdParty(user)
  _        <- someProcessing(...)
} {
  sendToUser
}