我正在研究函数式编程,即Arrow-kt
与Kotlin
我的用例如下:
我想执行Action
并返回关联的Reaction
Action
和Reaction
都关联了Side Effects
事件的顺序是
1)。接受Action
后立即触发相关的Actions Side Effects
2)。执行Action
并获得Reaction
3)。触发Reactions Side Effects
4)。返回Reaction
结果。
要求执行该操作时要考虑的其他因素
a)。当从未执行过该动作时;完成整个序列,例如步骤1-4。
b)。当执行Action
时;将该序列短路,以致无法完成第2-4步
c)。 Action
完成后;短路步骤1-3,然后返回Reaction
结果
上述副作用包括Logging
,Analytics
和User Interface
效果。
我觉得Action
和Reaction
副作用必须立即触发的要求意味着功能性编程解决方案不适合我的用例
我发现的Arrow-kt
演示文稿和博客描述了如何基于出现的错误条件或将Either
与Option
和{ {1}}实现相同的行为。
我遇到的困难
i)。从哪里开始????
ii)。只需完成四个步骤,如何控制/管理“短路”,以便完成步骤1-4,仅步骤1或仅步骤4
使用函数式编程能否实现所需的行为?
答案 0 :(得分:3)
适合您的情况的最佳出发点是https://arrow-kt.io/docs/patterns/error_handling/
如果您想产生诸如日志记录之类的副作用,您最容易做的就是将所有suspend
函数都标记为不纯。这样,您的整个程序将是一系列暂停函数调用。
您必须首先执行第一个暂停功能,或者执行诸如Activity#onCreate
或Controller
之类的业务逻辑的开始。要执行第一个暂停功能,请使用IO { myBusinessLogic() }.unsafeRunAsync { }