函数式编程
在命令式编程中,我们按部就班地编写程序代码,详细描述要完成的事情以及完成的顺序。
函数式编程:
- 函数式编程的主要目标是描述数据,以及要对数据应用的转换。
- 在函数式编程中,程序执行顺序的重要性很低;而在命令式编程中,步骤和顺序是非常重要的。
- 函数和数据集合是函数式编程的核心。
- 在函数式编程中,我们可以使用和滥用函数和递归;而在命令式编程中,则使用循环、赋值、条件和函数。
- 在函数式编程中,要避免副作用和可变数据,意味着我们不会修改传入函数的数据。如果需要基于输入返回一个解决方案,可以制作一个副本并返回数据修改后的副本。
// 命令式编程与函数式编程区别
// 例如,迭代数组
// 命令式编程
const printArray = function(array) {
for (var i = 0; i < array.length; i++) {
console.log(array[i])
}
}
printArray([1, 2, 3, 4, 5])
// 函数式编程
const forEach = function(array, action) {
for (var i = 0; i < array.length; i++) {
action(array[i])
}
}
const logItem = function(item) {
console.log(item)
}
forEach([1, 2, 3, 4, 5], logItem)
map
、filter
、reduce
是**JavaScript
函数式编程的基础**。
JavaScript函数式类库和数据结构
- Underscode.js:http://underscorejs.org/
- Bilby.js:http://bilby.brianmckenna.org/
- Lazy.js:http://danieltao.com/lazy.js/
- Bacon.js:https://baconjs.github.io/
- Fn.js:http://eliperelman.com/fn.js/
- Functional.js:http://functionaljs.com/
- Ramda.js:http://ramdajs.com/0.20.1/index.html
- Mori:http://swannodette.github.io/mori/
参考网站
- 函数式编程学习闯关网站:http://reactivex.io/learnrx/