在JS中实践函数式编程【1】 -- 前言

写在文章前

最近在了解函数式编程,菜狗如我,不总结就忘了本身学过啥。因此有了这个新坑。文中都是在看过文章以及书籍以后,增长了本身理解用通俗一点的方式讲出来。这篇文章是一篇不正经的劝学前言,若是喜欢这个文章劳烦各位点个赞。若是文章中有什么不恰当的地方,还请大佬在评论下方指出。感谢各位看官姥爷的阅读,祝你们有个快乐的周末~javascript

JS中实践函数式编程 -- 前言

做为开发人员,或多或少都会听到过函数式编程这个概念。 不少人都对这个概念似懂非懂,或许也读过一些文章,也了解过一些概念。 咱们都很想知道,这个函数式编程到底在有什么样的应用,他到底为啥用过的人都真香了。前端

做为一个前端搬砖工,平常最熟悉的语言就是javascript。但其实平心而论,js 绝对不是函数式编程的最佳实践语言。java

由于当初领导的我不要你以为我要我以为,js在竭尽所能的模仿JAVA。不只创造者在模仿,使用者也在模仿。曾经,js没有类,用function创造类也要上。现在ES6官宣个(假)类,使得OO的味道更浓了。编程

但,其实从某些方面来说,js也不是不能实践函数式编程。前端小伙伴都知道,js中没有那些极其复杂的内置的数据结构。这使得FP的应用变得简单了些。数组

最最主要的缘由,我就js用的6,你让我写别的语言,我也写很差啊。:)数据结构

那,若是你恰好对函数式编程有兴趣,也恰好除了据说用reduce不用foreach以外不知道其余实践的话,咱们就一块儿来了解了解怎么用js实践函数式编程吧😉框架

函数式编程

函数式编程是一种编程思想,他的做用是让你的代码可以结构化。按照归类法,同类别的还有其余耳熟能详的编程思想,好比说面向对象编程,面向过程编程。函数式编程

函数式编程英文是Functional programming , 业界简称FP。FP粉丝们说,FP好优秀,可读性高,可测试性高。固然,OO粉(OBJECT-ORIENTED)们也是这么说OO的. 若是说OO 的R技能是实例的话,FP的R技能就是函数了。经过组合函数就能够实现复杂的功能,同时还能避免共享状态和反作用。函数

给个学习的理由啊

两个爱豆若是定位相似,必定会有粉丝出来写我家爱豆比他家哪里哪里好。FP和OO的PK 也不例外,通稿满天飞。好比怎么更容易继承,好比测试方便,怎么好维护blablabla...学习

但我想给出几个我学习的理由,可能不是那么正经,也不是那么政治正确,但的确是我学习的原因。

火啊

娱乐圈里面,粉丝们看自家爱豆都是自带滤镜的,常常能听到我家爱豆演技好,比上次进步了不少balabala。。。但吃瓜群众内心都明白的很,你说你家爱豆演技好,演的电视剧豆瓣评分平均2分,谁信啊。。 因此仍是要用数听说话的。

在目前主流的框架或者库中,咱们都能看到FP的影子.好比前端的主流框架中,REACT 和 Vue 都使用了可复用的组件和纯函数来实现他们的内部功能(固然, 框架中也使用了大量的面向对象思想,这不能否认)。再好比 那些年咱们都用过的库 Underscore或者lodash等等。都有函数式编程的应用。

因而可知,你平常用的那些库那些框架都用了函数式编程的思想,那 你又有什么理由不试一试呢?

难啊

面向过程的思想,之因此用的人多,是由于他和咱们平常思惟的方式相似,说白了,就是闭着眼睛也能写出来的。 你们调侃业务逻辑是if else的堆砌, 也是由于他和咱们的思惟方式相似,不用认认真真思考,也不烧脑。

可是面向对象和函数式编程,你们会以为应用起来略难,是由于他须要你仔细的思考,仔细的抽象,他和人类天然思考的方式不同。过程虽然痛苦,虽然艰难,虽然你的大脑宕机了n次,可是这会使你的代码可读性高,可复用行高,可延伸性高,妈妈不再担忧产品加需求加功能了,仔细想想仍是美滋滋的呢,对吧。

新啊

维基百科中说, OO是在上个世纪70年代左右提出来的。这是什么概念,就是他是妈妈辈的思想。岁月沉淀了OO, 大牛们慢慢总结出了一些极佳的OO实践,以致于后人无需再探路便可用这个思想。

FP虽然他的数学相关历史渊源比OO要早的多得多,可是正式的书面标准倒是在90年代左右才提出的,能够说FP是咱们这一辈的。

学习FP,能让你也成为探路者之一,一不留神,也许你也是其余人心中的大牛了。本身开拓的路走起来的成就感比走柏油马路要高的多得多。

从我的角度来说,学习新鲜事物的一个好处就是能让你更全面的看待你了解的事物。若是说阅读源码是在深度上进行知识的扩充,那么学习新语言新思想就是在广度上拓展认知。

两代爱豆的PK

函数式编程为啥你们都说难,比OO难?甲之蜜糖,乙之砒霜,OO和FP究竟有哪些差别?为啥你们如今都在学习FP? OO难道要退役了?鲁迅说,不作对比的通稿都是在耍流氓,看个哈利波特都在站队呢,如今咱们也总结一下OO 和 FP。

实现方式

在OOP 语言中,对象Object是基本的实现方式。他是类Class的实例。 这和咱们的现实生活很类似。你们都是东西,东西和东西之间存在着关系。类就是对东西的抽象,人是人类的一个实例,我家狗是犬类的一个实例。

黑格尔说“纯粹”的思想就是指摆脱了任何感性具体性和拘泥于外在对象的性质的思想。函数式编程就是这样的一种思想。逻辑与数据彻底分离, 对象一旦创造出来就不可变,尽可能的避免共享状态,以及纯函数的提倡,这些规范都是以纯粹为核心的。(若是说纯粹的定义是如此的话,人类就不是纯粹的,毕竟人是会变心的。)

思想

举个例子【1】,假设你是某部门主管,恰逢年终,是时候给各位小弟涨一波工资。若是用程序实现的话,要怎么实现?

若是使用OOP思想,你的程序会这么写:

  1. 有个员工类,内置name和工资属性,有个改变工资的方法来更改工资。
  2. 实例化你的员工们。
  3. 运行每一个员工的改工资函数,完成加工资。

那若是使用FP思想有什么区别?

  1. 创造个员工群数组,每一个员工是这个数组中的一员,他们都有名字和薪资这两个属性。
  2. 建立一个更改薪水的函数返回值是每一个员工的更改后薪水的副本。
  3. 建立一个遍历员工数组的函数,使用上面更改某个员工薪水的函数进行更改薪水。
  4. 运行上面的这个函数,返回一个新的叫作快乐的小弟们的数组。

咱们能够看到,这两种思惟方式的不一样。OOP中,更改的是本来的数据。可是FP中都是每次返回新的副本体现出不可更改性。

总结

咱们从思想和实现方式上概述了一下OO和FP的区别,在后面更新的文章中,会详细的说明函数式编程以及在js的应用。固然,不存在不霸道的黄教主,也不存在某个单一思想就走天下的状况,OO 和 FP 都颇有趣,选择合适的才是最好的。

另外,公司在招聘,有须要内推的小伙伴能够私戳我~

【1】www.codenewbie.org/blogs/objec…

相关文章
相关标签/搜索