以并行处理为目标是函数式编程最为明显的优势。
函数式编程来源于把对数据的处理看作是数学里面的函数,通过这些函数的不断迭代,来实现任意的处理效果。函数是不变的,变化的只是数据。比如加法,加法就是加法,随着数据的不同给出不同的结果,但是加法本身是固定的,可以被大量的复制和传递,被保存,被加载,可以被验证。这就是一个可靠的函数。通过函数的思想,理论上,我们的代码可以像数学操作一样的安全可靠,并且正如数理逻辑奠基者之一丘奇证明的,所有的程序都可以使用函数迭代加以实现,其计算能力和图灵机是等效的,也就是说我们可以用这样的编程方法完成任何程序。
和丘奇当初发现自我指涉是实现强大函数能力的核心一样,函数对函数的加工,也就是函数的参数也是函数是实现强大函数式编程能力的核心。特别是函数可以自包含,也就是递归和迭代。这些高效的处理方法,让我们的程序精炼而可靠。在函数式里面一切都是定死,不可改变的,只有数据的流入和流出,其程序的正确性,甚至可以从数学上加以证明,从而实现程序的高可靠性。这当然需要在设计的时候,能够对需要解决的问题进行数学建模,从而找出需要使用的函数,然后用计算机加以实现。
正如我们前面介绍的这种模式我们可以把软件系统看作是一个处理数据的流水线,或者说处理管道。函数式软件编程的步骤就是首先好好的搭建好这个管道,在数据到来之前不做任何的操作。一切的稳定性都放在这个处理步骤上面,而灵活性则来自于把不同的具体处理函数传入到管道里面。通过这样的方式,让稳定性,安全性和灵活性分离。而当实际运行,数据到来的时候,数据从一端流入,另外一端直接流出结果,完成处理。当然,管道内部会有分支,有循环,但是这些步骤都是在数据到来之前就搭建好了的,并且不会被改变的。从真正的处理一开始,那么就是完全自动化的处理,除非出现异常的停机。
前面我们也提到了函数式的编程模式不允许出现变量,也就是不能把一个量的数值变来变去的,如果需要改变数值就建立新的变量赋值。通过这样的方式可以最大限度的避免了软件流程内部因为变量引起的潜在影响,保证了软件的质量。除此之外,函数式编程还普遍约束了函数定义的时候接收的参数,尽量不要让参数在众多的函数之间传递,一旦参数值变化,会对很多函数形成影响,这是一种常见的很危险的处理。相反,采用传递函数的方法,让依赖于某个参数的所有函数在一个地方聚集处理,就可以避免这