Skip to content

Latest commit

 

History

History
22 lines (12 loc) · 4.05 KB

foreword.md

File metadata and controls

22 lines (12 loc) · 4.05 KB

轻量函数式 JavaScript

我是一个函数式编程迷,这不是什么秘密。我尽自己所能地四处传播函数式思想和语言的福音,试着去阅读最新的学术论文,在我的业余时间研究抽象代数……。即使是在 JavaScript 中,我也拒绝编写任何一个非纯粹的语句,这也导致了《Frisby 教授的函数式编程最佳指南》的诞生。没错,我完全是一个狂热的教条主义者。

我并不一直是这样…… 我曾痴迷于对象。我曾热爱着为“真实的世界”建模。我曾是合成自动机的发明者,以大师级的精度整晚地摆弄它。我是感知玩偶的缔造者,手指在键盘上飞舞以给予它们生命 —— 一个真正的黑客版匹诺曹之父。然而,在足足编写了五年面向对象的代码之后,我发现自己从没有对它的结果感到过十分满意。它从来不能满足我,反而使我觉得自己是一个蹩脚的程序员。我甚至失去了自己的信仰 —— 简单、灵活且规模恰当的代码库是不可能实现的。

我觉得应当尝试一些不同的东西:函数式编程。我开始在自己日常的代码库中涉足函数式思想,我的同事们都很诧异,对我所做的事情搞不清任何头绪。当时我写的代码很烂,简直是顶级的数字垃圾。究其原因,是因为我对自己想要达成东西都缺乏清晰的认识和目标。我的编码小精灵,如果你喜欢这种说法的话,可没有给我任何指引。要搞清楚如何进行函数式编程,要花很长的时间和经历许多垃圾程序。

现在,在所有这些摸爬滚打之后,我感觉纯粹的函数式编程正如它期许的那样降临了。可读的程序是确实存在的!复用是确实存在的!我不再去发明,而是去发现我的模型。我变成了一个揭露巨大阴谋的暴戾侦探,软木板上钉满了数学上的证据。一个数字时代的斯托库以科学的名义测量着这个奇异世界的性质!虽不完美而且我依然还有很多东西要学,但我从未在自己的工作中感到如此满足,对结果如此满意。

要是在一切开始的时候有这本书在手中,我皈依函数式编程世界的过程可能会容易得多,而且破坏性更小。这本书有双重意义:它不仅教你如何在日常编码中使用函数式编程的各种结构,更重要的是,为你提供一个瞄准线;是你在正轨上前进的指导原则。

你将学习轻量函数式:一种由 Kyle 开拓而生的范式 —— 开启声明式的函数式编程,同时对 JavaScript 世界中的其他部分提供平衡与互动。你会理解纯函数式编程建立的基础,而不必非得对这种范式在整体上有所了解。你将会得到实践与探索函数式编程的技能,而不必非得为此重写既存代码。你可以在你的软件生涯中前进一步,而不必像我几年前那样漫无目的地乱撞。这也会使工友和同事们很高兴!

Kyle 是一位了不起的教师 —— 对完整全貌的不懈追求,不留任何未被探索的边角缝隙,同时对学习者面临的困境保持着一种同理心。Kyle 的风格与这个行业产生了共鸣,将我们所有人整体提升了一个层次。他的工作在 JavaScript 的历史和许多人的收藏夹中有着不可动摇的地位。你找对人了。

函数式编程有许多不同的定义。一个 Lisp 程序员的定义,从一个 Haskell 程序员的角度来看是十分不同的。OCaml 的函数式编程与 Erlang 中看到的范式几乎没有相似之处。你甚至会在 JavaScript 中发现好几种相互竞争的定义。还有一种纽带 —— 一些模糊的、看到才能明白的定义,更像是下流的做法(确实,有的人觉得 FP 很下流!),而这本书自然也囊括了它。其结果,在某些特定的圈子里可能不被认为是惯用法,但是从中得到的知识可以直接用于任何风格的函数式编程。

这本书是你 FP 之旅的绝妙起点。启程吧 Kyle ……

-Brian Lonsdorf (@drboolean)