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

2022-08-1123:16:33WEB前端开发Comments1,073 views字数 1059阅读模式

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

函数式是完全符合人类自然思考习惯的范式,不仅当我们对着编辑器的时候在用函数式思考,当我们散步出去,也是无时无刻不在用函数式思考和解决任何问题。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

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

二、数鹅卵石的例子

比如经典的鹅卵石的例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

 *
 * *
 * * *
 * * * *

问题是:求当有 n 层的时候,鹅卵石的总数?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

如果一个儿童,他没学过高斯的求和方法,思考过程是这样的:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

首先从变量出发,该题目中的变量只有一个就是层数 n,
而最终的结果是 total。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

他的观察:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

第一层,n = 1, total =1;
第二层,n = 2, total + 2;
第三层,n = 3, total + 3;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

于是他就自然而然地写出了 (total+n, n+1, terminate) 这个式子。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

然后将其命名为 triangle(total+n, n+1, terminate).文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

这就是SICP总结的iteration三要素:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

1) 确定数目的变量,
2) 如何得到最终的结果,
3) 控制循环的terminate文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

JS为例子:为什么说函数式是最好的编程范式和自然思考逻辑?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

三、用 JS 的实现

对 iteration 再提炼一步,第一项参数是生产最终结果的规则,后面两项控制循环,中间可能还有其他临时参数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

所有这一切都发生这个括号内(args),思考完毕,只须挪一步设置终止判断:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

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

然而,procedural-programming 的逻辑,却将自然流畅的思考拽进了琐碎的细节中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

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

第一行的参数(rows) 几乎只是一个摆设,你只能一头扎进黑匣子去思考问题,而且必然不可能在你走路的时候,用这套方法思考问题。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

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

而函数式更底层的逻辑,input -> process --> output 就是这个世界的底层逻辑,工作是,管理是,计算机的结构也是。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html

JS为例子:为什么说函数式是最好的编程范式和自然思考逻辑?
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/27025.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/gcs/27025.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定