前端函数式编程 - 易学易用
年底业务需要做大改版,正好这个机会把我负责的源码页面做了个大升级,不仅升级了业务架构,主要还是细分了模块和组件,优化了LESS分级结构,让代码看的更清爽,就是这样。
我最近制作了一套函数式编程****:《前端函数式编程易学易用》:http://study.163.com/course/introduction.htm?courseId=1004884007
欢迎大家交流学习!
原文地址: http://www.fed123.com/2018/01/20/hanshushibianchengdelijieyuyingyong/
说起函数编程,大家都比较熟悉。但是说起函数式编程,大家可能会想到之前看过的函子Functor、Monad等许多术语。但在实际应用中,或许我们根本用不到这么复杂的用法,而只是需要理解函数式编程的思想和理念就可以了。
话说,41年前,Fortran 语言的发明者John Backus在获得图灵奖的大会上做了这篇演讲: Can programming be liberated from the Von Neumann style,这里面他就提到了函数式编程。
最近几年,随着高度可伸缩计算和并行计算的兴起,函数式编程又火了一把。函数编程通过组合的方式可以实现强大的功能,这一点是面向对象编程(OOP)无法替代的,虽然OOP也有组合的思想,但是灵活度比不上函数。话说Java 8的也是引入了Lambda 表达式,更方便用函数式编程。
对于我们奋斗在业务前线的开发同学来说,主要应对的是业务开发场景,并不需要设计复杂的API,编写高抽象的代码。我们只需要了解纯函数,科里化等基础知识就可以应对绝大部分业务开发场景。
1. 通过抽离纯函数,可以分离业务逻辑,使得业务模块更加可重用,业务代码更清晰易懂。同时也可以隔离副作用,很方便针对纯函数编写测试用例。
2. 通过科里化,可以很高程度通过函数组合实现复杂的业务逻辑。大多是需要保存状态时需要用到,比如某个tab切走,再次切回来的时候,需要记住之前的状态。
我这里面函数写的并不是很规范,也是为了简化调用。但是整体上看代码已经清爽很多了,各部分也很清楚,这里只是简单的分离出 state和actions。
state: 负责数据部分,包含魔术变量。可以把所有不确定性因素都放在这里。
actions:负责功能性,业务逻辑等。可以写成纯函数和普通函数的集合。当然纯函数是没有副作用的,可保证稳定性;普通函数是有副作用的,需要谨慎bug。
这种编写方式针对于面向对象的编程又有哪些不同呢?下面再给一个对于状态处理的例子,通过科里化,其实就是借助闭包的力量,存储需要的状态。
其实函数式编程和面向对象编程并没有优劣之分,只是看使用的场景。个人觉得对于业务开发,功能模块开发,函数编程更加健壮,实用,可维护性高,易于阅读理解,易于重构。