1.7 函数式编程
函数式编程(Functional Programming)是基于λ演算(Lambda Calculus)的一种编程语言模式,它的实现基于λ演算和更具体的α-等价、β-归约等设定。虽然函数式编程和传统命令式语言(C类)基于完全不同的推导逻辑,但是可以做到一样的事物表达(图灵完备),它们的理论基础不同,感兴趣的读者可以自行了解。
逻辑和演算上的推导对于研发人员有一定的跨领域难度。我们可以将关注点集中到一些工程模型、表现形式和在前端的积极影响上,本书后面章节会逐渐展开这些内容。
因为我们关注输入和输出的结果多过关注实现的过程,所以函数式编程通常包含在声明式编程中。函数式编程将计算机运算视为数学上的函数计算,并且会避免使用程序状态以及易变对象。
常见的函数式编程语言有经典的Lisp系列(Clojure、Scala,见代码清单1-6)、Haskell、OCaml等。
代码清单1-6 Lisp简单示例
(define (* a b)) (if (= b 0) 0 (+ a (* a (- b 1))))
具体到前端层面,函数式编程在很多工具框架层面都有良好的表现,比如React可以帮助我们更好地约束副作用,进而基于函数迭代,生成整个前端系统。在前端范畴下我们还可以关注jQuery、Lodash、RxJS等工具和语言,它们和React一样具有函数式思想,这些内容的演进是本书讨论的重点。
在前端发展初期,我们在学习JavaScript时会看到很多括号,这些括号里大多是函数的声明、调用,甚至是自执行函数。这说明在设计之初,函数式特性就是JavaScript作为多范式语言的重要考量。不考虑工具库,从原生语言角度来看,JavaScript语言特征中契合函数式思想的内容有一等公民函数(First-class function)、Lambda表达式、闭包、数组组合子等。
落实到编码上,我们要从模块封装、状态表达、编码形态等方面做出更多考量,这些考量驱动了前端工具快节奏迭代。