什么是泛函编程(Functional Programming)?泛函编程就是用函数编写程序。这个回答太抽象,等于没说。
再说清楚一点:泛函编程就想砌积木一样把函数当成积木块,把函数的输出输入作为积木的楔子和楔孔,把一个函数的输出当作另一个函数的输入组合成一个更大的函数。整个砌积木的过程就是泛函编程。嗯,这个稍微清楚了一点,不过这样做来干什么呢?相对于泛函编程模式还有指令编程模式(Imperative Programming)。我们熟悉的OOP编程就是指令编程模式。在指令编程中我们按顺序用一条条指令改变程序中的一些变量来实现整个程序状态转变。而在泛函编程中我们首先按照程序要求把一些特定的函数用特定的方式组合起来形成另一个独立的大函数;然后把一些东西输入到这个大函数的输入口;当输入物经过那条由内部组件函数输入输出形成的曲折通道到达输出口时就产生了需要的结果(很像输入物件的变形过程)。输入物每经过一个组件函数,程序的状态就会发生一些转变,整个过程实际上就是程序的状态变形(Program State Transformation)。那么,可不可以说指令编程就对应变量赋值,泛函编程相当于函数组合呢?实际上“函数组合”这个词是泛函编程的灵魂,英文是Functional Composition。这么说是不是又清楚了一点了?不过对于我们这些用了一辈子OOP编程的人来说,相对于用一条指令设定一个变量直接看到结果来说,泛函编程实现状态转变的方式是那么的奇妙又不可琢磨。不用担心,改变观念是需要过程的。要知道泛函编程是一个全新的编程范畴。
如果泛函编程就是组合函数,那这可是一种全新的编程方式。如何实现函数的组合呢?泛函编程是以数学理论(?-culculus)为基础的,程序函数的组合是通过数学函数组合定律来实现的。嗯,的确是一套全新的概念,那就让我们从头学起吧。