写给前端工程师看的函数式编程对话 - 0

1,268 阅读2分钟

学生:方,我理解不了数据不可变。

方:正常,我在学 Haskell 之前也理解不了。

学生:你的意思是,我要真正理解数据不可变,就必须学 Haskell?

方:也不一定非得是 Haskell,任何一门「支持函数式」且推崇「数据不可变」的编程语言都可以。

学生:为什么,用 JS 就理解不了吗?

方:可以这么说,至少我无法用 JS 来讲解函数式,可能是我水平不够。

学生:那么我学会 Haskell 就能理解数据不可变吗?

方:不是这样的。

学生:什么意思?

方:Haskell 能发挥「数据不可变」的优势,这样你才会觉得「数据不可变」是好东西。另外,数据不可变不需要理解,这只是一个约定。

学生:约定?

方:是的,你以前学的编程语言约定「数据可变」,并且向你展示了「数据可变」的优势。

学生:对啊,我觉得数据可变才是正常的。

方:其实不是,你只是先入为主而已。你没发现数据可变的短板而已。

学生:短板是什么?

方:你现在不会认为这些短板是短板,因为你还没有见过「数据不可变」的长处。

学生:我确实没见过它的好处。我觉得它多此一举。

方:这就是问题所在,你不会认同「无副作用」「引用透明」「纯函数」是优点,你目前认为这些概念是硬凑出来的概念,对不对。

学生:是……

方:你被目前的计算机教育给局限了。你知道面向对象、图灵机,但不知道邱奇数、lambda 演算、Y 组合子,但是他们是同样重要的。

学生:确实是第一次听说……

方:那么,你想学函数式吗?

学生:学完有什么好处?

方:没有,只是拓宽你的思维,你可能依然继续用 JS 或者 Java 编程,很少用到这些技术。那么,你还想学函数式吗?

学生:你要花多久讲完?

方:你学会并习惯指令式编程语言,比如 JS 或者 Java,用了多久?

学生:大半年。

方:那么你至少需要同样长的时间才能习惯函数式,而且习惯之后就回不去了。我可能讲一段话,你要花一周甚至更久才能理解。你还想学函数式吗?

学生:听起来弊大于利?

方:我保证利大于弊,只不过短期内看不到利而已,学完之后你对编程会有完全不同的认识,但工资不一定涨。

学生:好吧,那我试试看,想学一学。

方:我们明天开始第一课。

后续:juejin.cn/post/693826…