函数式编程介绍之极简版

    Functional Programming是一种编程范式,其中计算是通过对函数的求值(evaluation)来组织的,它尽量避免涉及状态与可变(mutable)数据。FP强调的是函数的施用(application),与之相对的命令式编程则强调状态的改变。几乎所有的主流语言都是偏向命令式的。FP的最基本的理论基础是lambda演算,这是一个简单但强大的计算模型,也是一个非常利于形式化推导的框架。

    程序设计方法学最主要的目标是控制复杂性,共有3种基本的方法:
1)黑盒抽象 (blackbox abstraction)
2)约定接口 (conventional interfaces)
3)元语言抽象 (metalinguistics abstraction)

    纯粹函数(pure function)不依赖外部状态,也不对外部状态造成影响(即没有副作用),它只通过输入和输出展现它的语义,给它相等的输入,它一定给出相等的输出,因此它是stateless的,这也和数学上对函数的定义更为接近。纯粹函数是上述黑盒抽象和约定接口这两种方法的典型应用。具有这些性质的函数可以独立使用独立部署独立测试,也能被其它实现了相同接口的函数所替换,因此模块性组合性极佳,并且语义的推断与理解也更为容易(因为我们所熟悉的很多数学上的推导规则均可适用),这使得程序员能站在很高的抽象层次上灵活自由地拼装出大大小小各种模块。这是纯粹函数带来的核心好处,所以FP鼓励尽量使用它们来构建程序。纯粹函数的一个附带的好处是非常利于并行化,这在多核众核的时代已经成为一个越来越重要的优势。

    虽然FP鼓励纯粹函数,但它一样需要处理状态问题。有的语言通过直接引入命令式机制来解决该问题,从而变成了非纯粹的FP语言(比如Lisp、Scheme、SML、Erlang、OCaml);而有的则通过更巧妙也更functional的机制(比如Haskell的Monad,Clean的Unique Type)来处理,仍然保持了纯洁性。
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页