至此,我阐述了函数式语言出现的原因。以及支持函数式语言的重要理论支撑 —— lambda 演算系统的由来和基本内容。
函数式编程为什么要用函数去实现上文提到过,运算系统的本质是运算。
函数只是封装运算的一种手段,函数并不是真正的精髓,真正的精髓在于运算。
一、总结说到这,大家从根本上对函数式编程有了一个清晰的认知。比如它的数学基础,为什么存在、以及它和命令式语言的本质不同点。
二、函数式语言中,或者在函数式编程中,函数二字的含义是什么?它具备什么能力? 1、函数二字的含义这个函数是特指 满足 lambda 演算的 lambda 表达式。函数式编程中的函数表达式,又称为 lambda 表达式。
该函数具有四个能力:
可以调用
是运算元
可以在函数内保存数据
函数内的运算对函数外无副作用
2、运算元在 JS 中,函数也是运算元,但它的运算只有调用。
3、函数内部保存数据闭包的存在使得函数内保存数据得到了实现。函数执行,数据存在不同的闭包中,不会产生相互影响,就像面对对象中不同的实例拥有各自的自私有数据。多个实例之间不存在可共享的类成员。
4、总结从这问可以知道,并不是一个语言支持函数,这个语言就可以叫做函数式语言,或者说就具有函数式编程能力。
三、函数式编程的特性关键词有哪些?大致列一下:
引用透明性、纯洁性、无副作用、幂等性、惰性求值/非惰性求值、组合、柯里化、管道、高阶性、闭包、不可变性、递归、partial monad 、 monadic 、 functor 、 applicative 、尾递归、严格求值/非严格求值、无限流和共递归、状态转移、 pointfree 、一等公民、隐式编程/显式编程等。
1、引用透明性定义:任何程序中符合引用透明的表达式都可以由它的结果所取代,而不改变该程序的含义。
意义:让代码具有得到更好的推导性、可以直接转成结果。
举个例子:比如将 TS 转换成 JS 的过程中,如果表达式具备引用透明性。那么在编译的时候,就可以提前把表达式的结果算出来,然后直接变成值,在 JS 运行的时候,执行的时间就会降低。
2、纯洁性定义:对于相同的输入都将返回相同的输出。
优点:
可测试
无副作用
可以并行代码
可以缓存
3、惰性求值与非惰性求值定义:如果一个参数是需要用到时,才会完成求值(或取值) ,那么它就是惰性求值的。反之,就是非惰性求值。
(1)惰性求值: