本文主要是针对网上的一些关于Function Program的谬论的批判,从而说明Function Program所针对的问题是什么?它与具体的开发模式的关系?它与具体语言平台的关系?
另外,本文只是概念上的拨乱反正,无论是个人的能力还是经验,都无法与真正从事函数式编程的朋友相比,也恳请大家给予指点和批评
-Function Program = ?
Function Program这个词汇是目前叫的比较热的,但是单纯的从表面上去理解这样的词汇是没有意义的(因为你根本无法从这个词汇里探究出什么),这样吧举一个最简单的例子,javascript是如何看待函数的?-答案是javascript将函数也看作是对象。
对了,把函数能够看作是对象的编程方式就是函数式编程!
-Function Program与具体的开发模式无关
函数式的编程仅仅只是一种编程方法,和过程式的开发模式、面向对象的开发模式根本没有任何的关系!在我们面对一个项目的时候,我们要考虑的是采用模块化的方法来分解这样的系统还是采用面向对象的模式来分解,而不是去考虑采用Function Program(网上的一些文章将函数式的编程与面向对象理论相提并论根本就是谬论,因为它们根本就不是一个概念的东西),你可以用它来解决某个方面的问题(比如解决一些和数学有关的问题),但仅此而已,难道不是吗?所以Function Program与具体的开发模式根本就没有关系。
-Function Program与语言无关
网上的一些文章还将函数式编程与C++ / Java放在一起讨论,也是很荒谬的,C++/ Java属于语言层面的事物,在这个方向上来看,函数式只不过是某个语言层面的功能而已,如果语言本身没有提供这样的功能,就等待语言的改进(比如现在所推崇的范型设计);而如果语言本身支持的话(比如Python),也就不必劳师动众的发明什么范型或者STL之类的东西了,所以函数式编程这个概念只是语言层面的功能,根本与语言本身无关!
总结
如果你热衷的语言(比如C++、Python、Javascript)已经提供了函数式的解决方案(无论依靠范型还是语言本身),你就可以真正的开始享受函数式编程给你带来的好处(比如实现某个复杂的数学公式);然而如果你和我一样所支持的语言还没有确切的支持函数式编程,我们能够做的就是等待,等待语言的作者的改进以及某个范型库的实。
注:每一种语言都有自己的哲学理念,当然具体的实现方式与它的哲学理念也是紧密联系的。
注:在JAVA阵营也是从1.5(开始支持范型)才开始讨论函数式编程的