学会像一个函数式程序员那样思考在开始进入正题之前,我们先来做一个比喻
假设你是一个伐木工人,你拥有一把这个森林里最好的斧子,而它使也你成为了当地最有生产力的伐木工人
某一天,有人向你展示并称赞了一个新的伐木工具--电锯
由于销售人员是一个非常能推销的人,所以你买了一把电锯回来,尽管你并不知道如何去用
于是你尝试像以前砍树那样的来回摆动去锯树
并且你很快得出了一个结论这个新式的电锯毫无用处,于是你又重新拿起斧子去伐木
一直到有人过来并给你演示了如何去运转电锯,你才明白这里的不同
你可能联想到了用函数式编程来代替故事中的电锯
但是问题在于函数式编程是一种全新的编程模式,而不是一门新的语言,语法只是一个细节问题
而最不同的地方是要如何以不同的方式去思考
而我作为一名“电锯演示者”和一个函数式程序员来到了这里
欢迎来到函数式思维专栏
这个系列将探索函数式编程的话题,但是并不仅仅局限在函数式编程语言有关的内容上
正如我描绘的那样,以函数式的方法来写代码涉及到了设计,权衡,代码重用和其他一系列的观点
我会尝试着以Java(或是类Java语言)的方式尽可能多的展示函数式编程的概念,进而演示一些其他语言的能力-那些Java不具有的能力
当然我不会直接切入的非常深,然后讨论一些时髦的事物
取而代之的是,我会逐渐演示一种新的思考问题的方式(或许你已经在某些地方用了,但还没有意识到)
在接下来的两部分里,你可以把它当作是有关于函数式编程话题的一个旅行
其中的某些概念将会有大量的细节,在这个系列中我会用更多的情景和细节去描述
在旅程开始前,我将带你看一下一个相同问题的两个不同实现,一个用传统的方式来写,另一个使用更多的函数式方式
数字归类谈论两种不同的编程模式,你必须用代码来做比较
第一个例子是我另一本书《TheProductiveProgrammer》和《测试驱动设计1,2》两篇文章中的一个变体