不要在一个表达式中包含太多

  • 为计算单元找到有意义的名称。
  • 使用 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
}