帮你精通JS:为什么说函数式是最好的编程范式和自然思考逻辑?

一、函数式是思考问题的本来状态

函数式是完全符合人类自然思考习惯的范式,不仅当我们对着编辑器的时候在用函数式思考,当我们散步出去,也是无时无刻不在用函数式思考和解决任何问题。

倘若不考虑更加符合人类自然思考逻辑的递归思考方式recursive-function, 而只考虑“尾递归”的情况。概括一句话,函数式编程就是所有的一切思考都发生在 function (args-list) 的这个参数括号内,而无须下潜到第二行,陷足到 dirty-details 之中。

二、数鹅卵石的例子

比如经典的鹅卵石的例子:

 *
 * *
 * * *
 * * * *

问题是:求当有 n 层的时候,鹅卵石的总数?

如果一个儿童,他没学过高斯的求和方法,思考过程是这样的:

首先从变量出发,该题目中的变量只有一个就是层数 n,
而最终的结果是 total。

他的观察:

第一层,n = 1, total =1;
第二层,n = 2, total + 2;
第三层,n = 3, total + 3;

于是他就自然而然地写出了 (total+n, n+1, terminate) 这个式子。

然后将其命名为 triangle(total+n, n+1, terminate).

这就是SICP总结的iteration三要素:

1) 确定数目的变量,
2) 如何得到最终的结果,
3) 控制循环的terminate

帮你精通JS:为什么说函数式是最好的编程范式和自然思考逻辑?

三、用 JS 的实现

对 iteration 再提炼一步,第一项参数是生产最终结果的规则,后面两项控制循环,中间可能还有其他临时参数。

所有这一切都发生这个括号内(args),思考完毕,只须挪一步设置终止判断:

function triangle1(product, rowNumber, rows) {
    return rowNumber > rows
        ? product
        : triangle(product+rowNumber, rowNumber+1, rows);
}

然而,procedural-programming 的逻辑,却将自然流畅的思考拽进了琐碎的细节中。

function triangle1(rows) {
    let [total, rowNumber] = [0, 1];
    while (rowNumber <= rows) {
        total = total + rowNumber;
        rowNumber++;
    }
    return total;
}

第一行的参数(rows) 几乎只是一个摆设,你只能一头扎进黑匣子去思考问题,而且必然不可能在你走路的时候,用这套方法思考问题。

四、函数式是世界运行的底层逻辑

而函数式更底层的逻辑,input -> process --> output 就是这个世界的底层逻辑,工作是,管理是,计算机的结构也是。

帮你精通JS:为什么说函数式是最好的编程范式和自然思考逻辑?

展开阅读全文

页面更新:2024-05-23

标签:范式   递归   函数   逻辑   式子   自然   目的   鹅卵石   这个世界   无时无刻   自然而然   变量   例子   人类   参数

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top