电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

学会像一个函数式程序员那样思考VIP免费

学会像一个函数式程序员那样思考_第1页
学会像一个函数式程序员那样思考_第2页
学会像一个函数式程序员那样思考_第3页
学会像一个函数式程序员那样思考在开始进入正题之前,我们先来做一个比喻。假设你是一个伐木工人,你拥有一把这个森林里最好的斧子,而它使也你成为了当地最有生产力的伐木工人。某一天,有人向你展示并称赞了一个新的伐木工具--电锯。由于销售人员是一个非常能推销的人,所以你买了一把电锯回来,尽管你并不知道如何去用。于是你尝试像以前砍树那样的来回摆动去锯树。并且你很快得出了一个结论这个新式的电锯毫无用处,于是你又重新拿起斧子去伐木。一直到有人过来并给你演示了如何去运转电锯,你才明白这里的不同。你可能联想到了用函数式编程来代替故事中的电锯。但是问题在于函数式编程是一种全新的编程模式,而不是一门新的语言,语法只是一个细节问题。而最不同的地方是要如何以不同的方式去思考。而我作为一名“电锯演示者”和一个函数式程序员来到了这里。欢迎来到函数式思维专栏。这个系列将探索函数式编程的话题,但是并不仅仅局限在函数式编程语言有关的内容上。正如我描绘的那样,以函数式的方法来写代码涉及到了设计,权衡,代码重用和其他一系列的观点。我会尝试着以Java(或是类Java语言)的方式尽可能多的展示函数式编程的概念,进而演示一些其他语言的能力-那些Java不具有的能力。当然我不会直接切入的非常深,然后讨论一些时髦的事物。取而代之的是,我会逐渐演示一种新的思考问题的方式(或许你已经在某些地方用了,但还没有意识到)。在接下来的两部分里,你可以把它当作是有关于函数式编程话题的一个旅行。其中的某些概念将会有大量的细节,在这个系列中我会用更多的情景和细节去描述。在旅程开始前,我将带你看一下一个相同问题的两个不同实现,一个用传统的方式来写,另一个使用更多的函数式方式。数字归类谈论两种不同的编程模式,你必须用代码来做比较。第一个例子是我另一本书《TheProductiveProgrammer》和《测试驱动设计1,2》两篇文章中的一个变体。我选取了少量的代码,因为在这两篇文章里已经深入的分析了这段代码。这些文章对这个设计所做的称赞并没有错,但我想在这里进一步提供一个不同的设计意图。问题的需求是这样的:假设给定任意一个正整数都大于1,你必须按照完美的,过剩的和不足的进行归类。一个完美数正好是它所有整除因子的总和。同样地,一个过剩数的所有整除因子总和大于该数,而一个不足数的所有整除因子总和小于该数。快速数字归类器列表1中的类(NumberClassifier)满足所有这些需求:1.publicclassClassifier6{2.privateSet_factors;3.privateint_number;4.5.publicClassifier6(intnumber){6.if(number<1)7.thrownewInvalidNumberException("Can'tclassifynegativenumbers");8._number=number;9._factors=newHashSet>();10._factors.add(1);11._factors.add(_number);12.}13.14.privatebooleanisFactor(intfactor){15.return_number%factor==0;16.}17.18.publicSetgetFactors(){19.return_factors;20.}21.22.privatevoidcalculateFactors(){23.for(inti=1;i<=sqrt(_number)+1;i++)24.if(isFactor(i))25.26.addFactor(i);27.}28.29.privatevoidaddFactor(intfactor){30._factors.add(factor);31._factors.add(_number/factor);32.}33.34.privateintsumOfFactors(){35.calculateFactors();36.intsum=0;37.for(inti:_factors)38.sum+=i;39.returnsum;40.}41.42.publicbooleanisPerfect(){43.returnsumOfFactors()-_number==_number;44.}45.46.publicbooleanisAbundant(){47.returnsumOfFactors()-_number>_number;48.}49.50.publicbooleanisDeficient(){51.returnsumOfFactors()-_number<_number;52.}53.54.publicstaticbooleanisPerfect(intnumber){55.returnnewClassifier6(number).isPerfect();56.}57.}这段代码有几处地方需要关注一下:它拥有大范围的测试(有一部分我是为了讨论测试驱动开发而写的)注:这条所说的测试位于作者另一篇文章中。这个类由大量的紧耦合方法组成,在它的构造函数中拥有测试驱动开发的边际效应。在calculateFactors()方法里内嵌了性能优化算法。这个类的主体是由采集因子...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部