版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010176014/article/details/85911994
读书《函数式编程思维》(Neal Ford 著) 目前理解的函数式编程思维,是一种抽象的映射关系,输入和输出之间的映射。应用这样的抽象,让我们不用关注于低层次细节的实现。最直观的感受就是Java8中的lambda也太好用了啊~
函数式编程思维
- 主要内容
- 演化的语言
- 现实应用
- 多语言与多范式
主要内容
范式转变
范式主要包含命令式,声明式和函数式。
命令式:指程序是一系列改变状态的命令。
函数式:将程序描述为表达式和变换,以数学方程的形式建模,并尽量避免可变的状态。
声明式:它描述目标的性质,让计算机明白目标,而非流程。例如Mysql ,正则等。
权责让渡
迭代让位于高阶函数
递归
闭包:特殊的函数,绑定了函数内部引用的所有变量。在生成的时候,会把引用的变量全部劝导代码块的作用域里,封闭包围起来。常用于绑定常量或是不可变的值。“让语言去管理状态”可以推迟执行
柯里化和函数的部分施用
柯里化:从一个多参数函数变成一连串单参数函数的变换。
部分施用:通过提前代入一部分参数值,使一个多参函数得以省略部分参数,从而转化为一个参数数目较少的函数。
用巧不用蛮
缓存。书中用了很大的篇幅去讲如何应用缓存。感觉是每种编程方式都会考虑的问题,而且也没有看出和命令式编程缓存应用的区别主要是在哪里。
模式与重用
template method
strategy
flyweight
factory
演化的语言
分发
运算符重载
函数式的数据结构
错误处理:either,option
现实应用
java8:函数式接口,optional,stream
其中:optional防止方法的返回结果出现无法区分表示错误的null,和作为有效结果的null
多语言与多范式
函数式与元编程的结合,利用元编程在数据类型之间建立映射
TODO:
- 理解函数式的缓存
- 理解闭包代替Command
- 函数式编程,为什么会强调值不可变
- 一等公民?除了指函数可以出现在任何地方,还有其他含义么?一等公民是对谁而言呢。