什么是函数式编程
简单地说,函数式编程通过使用函数,将值转换成抽象单元,接着用于构建软件系统。
面向对象VS函数式编程
面向对象编程
面向对象编程认为一切事物皆对象,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象和数字建模。面向对象编程有三个特征,分别是封装,继承和多态。面向对象的主要目标是问题的分解,如下图所示:
函数式编程
函数式编程以函数为抽象单元和行为单元,实现数据的封装和隐藏,与面向对象将问题分解成多组“名词”或对象不同,函数式方法将相同的问题分解成多组“动词”或函数。函数式编程也可以通过组合来构造更大的函数,实现抽象的行为。如下图所示:一种函数式的部件组成一个完整的系统的方法,就是取一个“值”,然后将它逐渐“改变”,通过一个原始的或者组合的函数,成为另外一个值。
两者差异
在一个面向对象的系统内部,对象之间的交互会引起各种对象内部状态的变化,而整个系统的变化是由许多小的,细微的变化混合形成的,这些相互关联的状态变化形成了一个概念上的“变化网”。但我们需要跟踪这边变化的时候,就需要了解彼此之间这种微妙且广泛的变化。
相比之下,函数式系统则努力减少可见状态的修改。向一个遵循函数式的系统添加新功能就成了理解如何在局限的上下文环境中,无破坏地进行数据转换。函数式编程以命令的方式构建系统,并通过显性的状态来改变缩减到最小来变得更加模块化。
例子
function demo{
return function(array){
return fun.apply(null,array);//返回一个函数
}
}
总结
总的来说,函数式编程包括以下四个方面:
- 确定抽象函数,并为其构造函数
- 利用已有的函数来构造更为复杂的函数
- 通过将函数传给其他的函数来构建更为复杂的抽象。