vlambda博客
学习文章列表

函数式编程/命令式编程








简介







当我们看一些技术博客或者论坛的时候经常会看到函数式编程,那么什么是函数式编程呢?除了函数编程还有什么编程方法呢?函数编程又有什么好处呢?接下来我将利用JavaScript代码片段进行演示说明。








命令式编程







在函数式编程之前先来了解一下什么是命令式编程。命令式编程关心解决问题的步骤。

假如小明来到某公司面试,技术官给你提出了如下要求(当然正儿八经的公司不会出这种一加一的问题,这里只是假设):

【20,30,40,22,51,32,65,98】

1.从数组中筛选大于50的元素

2.从筛选出的元素中每一个都乘2

3.然后再进行元素相加

考虑过后小明给出了如下解答

小明给出的答案就是命令式编程——你要做什么事情,你得把达到目的的步骤详细的描述出来,然后交给机器去运行。这也正是命令式编程的理论模型——图灵机的特点。一条写满数据的纸带,一条根据纸带内容运动的机器,机器每动一步都需要纸带上写着如何达到。








函数式编程







函数式编程关心数据的映射。这里的映射就是数学上「函数」的概念——一种东西和另一种东西之间的对应关系。

如果进行函数式编程上面的要求就会一步到位,不用啰里啰唆的写一堆可读性较差的代码

(这里用到了三JavaScript中高阶函数,如果不明白的小伙伴要抓紧去学习一下了在以后的工作中用到的还是比较频繁的)怎么样?有没有瞬间感觉神气爽。

首先,最直观的角度来说,函数式风格的代码可以写得很精简,大大减少了键盘的损耗

其次,函数式的代码是“对映射的描述”,它不仅可以描述二叉树这样的数据结构之间的对应关系,任何能在计算机中体现的东西之间的对应关系都可以描述——比如函数和函数之间的映射(比如 functor);比如外部操作到 GUI 之间的映射(就是现在前端热炒的所谓 FRP)。它的抽象程度可以很高,这就意味着函数式的代码可以更方便的复用。