Trampoline与福格行为模型的相似点
什么是福格行为模型?
福格行为模型可以用一个公式来表示
- BBB表示行为
- MMM表示动机
- AAA表示能力
- PPP表示成功的提示
它们之间的关系可以用下面的图标来表示,在动机足够强且具备相应能力时,我们的行为就在行动线之上,只要给与成功的提示,相应的行为就会发生。
动机即愿望,愿望需要行动才能实现,而行动由一系列行为组成,且这些行为通常是需要持续发生的。福格行为模型可以帮助我们设计行为以实现愿望,这些设计的行为会以微习惯的形式嵌入到生活中,即使在我们情绪最低落,意志最薄弱的时候也能够完成。
Trampoline与福格行为模型的相似点
动机和栈
福格行为模型强调动机是不可靠的,它会随时间变化,我们在动机最强时的行为可能在一段时间后变得无法完成。例如作者很想戒掉观看短视频的习惯,觉得它很浪费时间,每次观看后都会下定决心将短视频平台删掉或把该功能关掉。但过了几天之后,一旦没有事情可做或情绪低落,又会不自觉的重新安装观看。
栈在Java程序运行时的空间是有限的,无法无限增长,如果程序需要的栈空间超过分配空间,就会抛出StackOverflowError。从空间角度来说,栈也是不可靠的,因为程序对栈空间的需求是随时间变化的,在维护一段时间或运行一段时间后,需求的空间可能会超出分配空间。
行为设计和Trampolining
动机的不可靠导致了行为的不可持续,所以我们需要对行为进行设计来减弱动机不可靠的影响。福格行为模型的行为设计步骤为
- 明确愿望
- 探索行为选项
- 为自己匹配具体行为
- 从微习惯开始
- 找到对的提示
- 庆祝成功
- 排除障碍、重复和扩展
这里2和3是行为分解,找到与我们能力相匹配的行为。4和5是建立行为关联,保证行为发生,用微习惯的方式降低行为对动机的依赖。6和7是行为结果,如果达到预期,可以强化行为的可持续性。如果没有,则需要分析原因,然后重新设计行为。
如果我们要在程序中避免StackOverflowError,也需要对我们的程序进行设计,这个过程叫Trampolining
- 将函数返回类型变为
Trampoline
- 将常数用
Done
封装 - 将thunk函数调用用
More
封装 - 将复合函数调用用
FlatMap
封装 - 将程序返回的
Trampoline
对象用Trampoline的解释函数运行 - 返回解释函数的运行结果
对比福格行为模型,2,3和4是函数分解(行为分解),找到所有的函数调用进行封装。 5是建立函数调用关系(建立行为关联),保证在当前表达式计算完成后对栈空间进行清理,并调用下一个函数,减少对栈空间的需求。 6是运行结果(行为结果),如果正确,说明已经消除StackOverflowError,如果仍有异常,则需要找到遗漏的函数调用,然后对其进行封装。
转载自:https://juejin.cn/post/7136949042344361992