【发布时间】:2022-01-22 10:06:34
【问题描述】:
我很难理解什么是价值效应系统,例如 ZIO 或 Cats Effect。
- 它不会使代码可读,例如:
val wrappedB = for {
a <- getA() // : ZIO[R, E, A]
b <- getB(a) // : ZIO[R, E, B]
} yield b
对我来说并不比以下内容更具可读性:
val a = getA() // : A
val b = getB(a) // : B
我什至可以争辩说,后者更直接,因为调用函数会执行它,而不仅仅是创建效果或执行管道。
- 延迟执行听起来并不令人信服,因为到目前为止我遇到的所有示例都只是立即执行管道。恕我直言,可以通过更简单的方式实现并行或多次执行效果,例如C# 有 Parallel.ForEach
- 可组合性。可以在不使用效果的情况下组合函数,例如通过简单的构图。
- 纯函数方法。最后将执行纯 instructions,所以它似乎只是假装 DB 访问是纯的。推理无济于事,因为虽然指令的构造是纯粹的,但执行它们却不是。
我可能遗漏了一些东西,或者只是淡化了上述好处,或者在某些情况下(例如复杂领域),好处可能更大。 使用效果系统的最大卖点是什么?
【问题讨论】:
-
在这里查看 Fabio 的 "Programs as Values" 系列:systemfw.org/archive.html 然后如果您有后续问题/批评,那么我建议您将其移至Scala discord server 或 Typelevel one 因为,恕我直言,这个话题在对话中比在帖子中更容易阐述。
标签: scala functional-programming