diff --git a/pragmatic-functional-programming/README.md b/pragmatic-functional-programming/README.md index c31734d..c397644 100644 --- a/pragmatic-functional-programming/README.md +++ b/pragmatic-functional-programming/README.md @@ -37,9 +37,9 @@ 为什么呢?让我们回到`FP`起初引起我们兴趣的原因上 —— `FP`使得并发变得安全得多。如果你要搭建一个有很多线程或是进程的系统,使用`FP`会大大减少可能由竞争条件和并发更新而引发的问题。 -还有其它理由吗?呃~`FP`更易写、易读、易于测试和易于理解。听到这些,我能想象到,有些读者比如你已经掀桌子咆哮了。你尝试过`FP`,『有毛容易啊』是你的感受。`map`、`reduce`和递归 —— 尤其是**尾**递归,有哪个说得上容易?你说得没错,收到收到。但是,这其实只是个是否熟悉的问题。一旦你熟悉了这些概念以后(建立起熟悉的过程其实并不需要太长时间),编程就会变得**更容易得多**。 +还有其它理由吗?嗯~`FP`更易写、易读、易于测试和易于理解。听到这些,我能想象到,有些读者比如你已经掀桌子咆哮了。你尝试过`FP`,『有毛容易啊』是你的感受。`map`、`reduce`和递归 —— 尤其是**尾**递归,有哪个说得上容易?你说得没错,收到收到。但是,这其实只是个是否熟悉的问题。一旦你熟悉了这些概念以后(建立起熟悉的过程其实并不需要太长时间),编程就会变得**更容易得多**。 -为什么会更容易呢?因为你不再需要跟踪系统的状态。由于变量的状态无法改变,所以系统的状态也就维持不变。不需要跟踪的不仅仅是系统,还有列表、集合、栈、队列等等通通都不需要跟踪状态,因为这些数据结构也无法改变。在`FP`语言中,当你向一个栈`push`一个元素,你将会得到一个新的栈,并不会改变原来的栈。这意味着,像接抛球杂技那样,程序员在空中需要同时控制好的球变少了;需要记忆的东西更少了;需要跟踪的东西更少了。因而代码的编写、阅读、理解和测试变得简单得多。 +为什么会更容易呢?因为你不再需要跟踪系统的状态。由于变量的状态无法改变,所以系统的状态也就维持不变。不需要跟踪的不仅仅是系统,还有列表、集合、栈、队列等等通通都不需要跟踪状态,因为这些数据结构也无法改变。在`FP`语言中,当向一个栈`push`一个元素,得到是一个新的栈,并不会改变原来的栈。这意味着,像接抛球杂耍那样,程序员在空中需要同时控制好的球变少了;需要记忆的东西更少了;需要跟踪的东西更少了。因而代码的编写、阅读、理解和测试变得简单得多。 那么,你应该使用哪种`FP`语言呢?我最喜欢的是`Clojure`。因为`Clojure`难以置信的简单。它是`Lisp`的一个方言,`Lisp`是一个简单至美的语言。让我来展示一下吧: