学会像一个函数式程序员那样思考.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学会像一个函数式程序员那样思考

学会像一个函数式程序员那样思考 在开始进入正题之前,我们先来做一个比喻。假设你是一个伐木工人,你拥有一把这个森林里最好的斧子,而它使也你成为了当地最有生产力的伐木工人。 某一天,有人向你展示并称赞了一个新的伐木工具--电锯。由于销售人员是一个非常能推销的人,所以你买了一把电锯回来,尽管你并不知道如何去用。于是你尝试像以前砍树那样的来回摆动去锯树。并且你很快得出了一个结论这个新式的电锯毫无用处,于是你又重新拿起斧子去伐木。一直到有人过来并给你演示了如何去运转电锯,你才明白这里的不同。 你可能联想到了用函数式编程来代替故事中的电锯。但是问题在于函数式编程是一种全新的编程模式,而不是一门新的语言,语法只是一个细节问题。而最不同的地方是要如何以不同的方式去思考。而我作为一名“电锯演示者”和一个函数式程序员来到了这里。 欢迎来到函数式思维专栏。这个系列将探索函数式编程的话题,但是并不仅仅局限在函数式编程语言有关的内容上。正如我描绘的那样,以函数式的方法来写代码涉及到了设计,权衡,代码重用和其他一系列的观点。我会尝试着以Java(或是类Java语言)的方式尽可能多的展示函数式编程的概念, 进而演示一些其他语言的能力-那些Java不具有的能力。当然我不会直接切入的非常深,然后讨论一些时髦的事物。取而代之的是,我会逐渐演示一种新的思考问题的方式(或许你已经在某些地方用了,但还没有意识到)。 在接下来的两部分里,你可以把它当作是有关于函数式编程话题的一个旅行。其中的某些概念将会有大量的细节,在这个系列中我会用更多的情景和细节去描述。在旅程开始前,我将带你看一下一个相同问题的两个不同实现,一个用传统的方式来写,另一个使用更多的函数式方式。 数字归类 谈论两种不同的编程模式,你必须用代码来做比较。第一个例子是我另一本书《The Productive Programmer》和《测试驱动设计1,2》两篇文章中的一个变体。我选取了少量的代码,因为在这两篇文章里已经深入的分析了这段代码。这些文章对这个设计所做的称赞并没有错,但我想在这里进一步提供一个不同的设计意图。 问题的需求是这样的:假设给定任意一个正整数都大于1,你必须按照完美的,过剩的和不足的进行归类。一个完美数正好是它所有整除因子的总和。同样地,一个过剩数的所有整除因子总和大于该数,而一个不足数的所有整除因子总和小于该数。 快速数字归类器 列表1中的类(NumberClassifier)满足所有这些需求: public?class?Classifier6?{? ????private?SetInteger?_factors;? ????private?int?_number;? ?? ????public?Classifier6(int?number)?{? ????????if?(number??1)? ????????????throw?new?InvalidNumberException(Cant?classify?negative?numbers);? ????????_number?=?number;? ????????_factors?=?new?HashSetInteger();? ????????_factors.add(1);? ????????_factors.add(_number);? ????}? ?? ????private?boolean?isFactor(int?factor)?{? ????????return?_number?%?factor?==?0;? ????}? ?? ????public?SetInteger?getFactors()?{? ????????return?_factors;? ????}? ?? ????private?void?calculateFactors()?{? ????????for?(int?i?=?1;?i?=?sqrt(_number)?+?1;?i++)? ????????????if?(isFactor(i))? ?? ????????????????addFactor(i);? ????}? ?? ????private?void?addFactor(int?factor)?{? ????????_factors.add(factor);? ????????_factors.add(_number?/?factor);? ????}? ?? ????private?int?sumOfFactors()?{? ????????calculateFactors();? ????????int?sum?=?0;? ????????for?(int?i?:?_factors)? ????????????s

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档