
命令式到函数式
命令式,过渡关注系统中值的变化,每次操作的颗粒的是值变化
函数式,主要关注系统中状态的变化,每次操作的颗粒度是状态变化
从 “状态修改” 到 “值传递”
函数式编程中的主要点:1是函数也可说是块,2是状态变化也可说是不可变的值
不可变的值,并不是说数据不变,值不变,而是认为在系统中输入的值是不变的确定的,输出的值也是不变的确定的,这样就将系统中的可变状态变为数学逻辑中的模型和结果的传递,比命令式相对抽象。
什么是不可变数据?
不可变性与纯函数的关系
编程语言中的不可变性很好实现,关键式思维的改变
当使用函数式编程时,由于使用了数学抽象和不可变性的概念,我们可以引入时间的概念来帮助理解函数式编程。
也就说函数式编程中的不可变性可以和时间相关联,输入的数值和当时的时间点相绑定,而返回的数据与新产生的时间点相绑定,看似数据改变了实际上数据是在新的时间点产生的新数据。
状态即时间切片
引述时间概念后,数据的状态就可以看成与系统状态在时间序列上的时间切片,每一次数据的改变都可以看作系统在时间线上的一个索引值,当该系统中所有的值的变化,通过时间序列串联就形成了一条由数据和时间序列相组合成的数据时间隧道。该隧道记录的状态就是整个系统的数据变化,而我们所在函数中看到的数据状态的改变,就是该系统中的某一个时间切片。
也就说函数中输入的不可变的值可以说是数据在状态时间上的时间切片,而输出的数据又是数据在另一个状态时间上的时间切片,程序员进行调试时实际上做的的时间旅行调试而在时间旅行上数据状态的变化就是事件的触发,调试时叫做事件溯源,只不过在调试时数据量可能随时间的变化量变大,但是可以根据事件进行筛选。
而这个系统的时间隧道中时间序列上的数据状态的改变,就是事件触发的结果,而系统中的事件触发就是由系统的逻辑所触发的。
这样就可以理解为函数式编程实际上就是做的思维时空的编程
哲学思考:计算与物理时间的统一
1. 符合相对论直觉
2. 对抗软件熵增
3. 量子计算类比
总结:时间作为函数式编程的一等公民
函数式编程通过不可变性将时间转化为可计算、可调试的维度。时间旅行调试和事件溯源的结合,使程序员能够像物理学家研究粒子轨迹一样分析程序状态变化。这种范式不仅简化了调试流程,更提供了一种全新的系统设计视角 —— 将系统视为时间轴上的函数变换序列,而非传统的状态机。随着大数据和实时系统的发展,这种将时间显性化的编程思维将变得愈发重要。
时间作为函数式编程的一等公民中事件是隐形的函数运行环境不参与计算但是参与了状态的改变
这种设计使得程序既保持数学上的可推导性,又能响应现实世界的异步事件 ——事件如同连接函数式计算与物理时间的桥梁,在不污染纯函数逻辑的前提下,为程序注入动态行为。理解这一机制,有助于在分布式系统、实时应用中设计出更健壮、可调试的函数式架构。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。