lambdas for_Java 8 Lambdas –缺少脱离Java的链接

lambdas for

我学习了函数式编程,但是后来我决定我更喜欢命令式编程,于是我转回去。

—没人

从命令式编程过渡到函数式编程是当今非常普遍的事情。 互联网上的博客文章充斥着关于它的证词。 我读过的所有内容以及与我交谈过的每个人(包括我自己)都有相同的故事。 一旦他们开始函数式编程,就不会再回头了。 他们喜欢它,在早期,即使他们学到的很少,他们也渴望

学到更多。

在我看来,从命令式编程过渡到函数式编程是交通繁忙的必经之路。 它是一个二极管,两端有一百万伏特的电压。 这是自来水管道上的止回阀。 您不仅不能回头,而且还带有无法抗拒的探索和学习更多知识的欲望,这使您进一步进入函数式编程。

Java 8 Lambdas

随着Java 8 lambda的到来,这为地球上最大的一组开发人员之一带来了一个有趣的转折点。 Lambda本身不一定等同于函数式编程。 但是他们确实启用了它。 当这里的开发人员开始涉足函数式编程(那里是库维护者)时,我们将开始看到Java源代码中的一些新事物。 以前可能返回null将开始返回Optional 。 执行IO的库(例如HTTP客户端库)将开始返回CompletableFuture 。 越来越多的功能概念将开始渗透到Java接口中,将有称为fold,map,reduce,collect的方法。 因此,这将成为Java大众从命令式编程向函数式编程过渡的一条途径。

但是Java是否可以满足他们的需求? 看着Lambda规格,我怀疑不是。 我在Lambda规范中看到了一个天才的精髓,它使Lambdas可以立即使用许多现有的库,而无需进行任何更改。 这是因为Lambda只是用于实现单抽象方法(SAM)接口的语法糖。 在Java中,随处可见SAM,从并Callable中的RunnableCallable到Swing中的ActionListener ,再到Guava中的FunctionSupplier ,列表将不胜枚举。 所有这些库现在都已准备就绪。

但是,这也带来了问题。 开始编写事物时,函数式编程会变得很有趣。 传递函数并将它们组合在一起的能力提供了强大的功能-但是Java 8 Lambda并不是可组合的。 Java 8确实提供了Future SAM,但是Guava和许多其他库也提供了。 为了将它们组合在一起,您需要组合方法的所有排列。 至少,不是以传统的Java方式,两个相同类型的SAM甚至都不是很容易组成,因为您无法向SAM添加任何方法(例如map或transform方法)来进行合成。

因此,如果没有能力执行最基本的功能概念之一(组成功能),Java能否成为一种功能语言? 也许有一些我没有想到的创造性方法可以解决这个问题。 也许并不需要,我认为Java 8 Lambda的设计者无意将Java变成功能语言,因此您不能将其称为Lambda规范的错误。 但是问题是,正如我早先指出的那样,对函数式编程有所了解的开发人员将需要更多,并且需要更快。 即使Java可以成为一种功能语言,我也认为它不会跟上Java开发人员向功能编程的发展。

所以我要做个预测。 Java 8 Lambdas将被急切采用。 如此急切地将Java本身抛在后面,并且大多数Java开发人员将转向一种能够满足他们需求的语言,因为他们迫切需要新的函数式程序员。

哪种语言?

在推测Java开发人员将使用哪种语言之前,让我首先确定一下我既有偏见又无知。 我为Typesafe工作,因此显然偏向于Scala。 除了在大学与Haskell和ML一起玩之外,我从没有在生气时使用任何其他功能性语言。 因此,我一言不发,如果您不同意,请撰写自己的博客文章。

Scala作为一种过渡语言

因此,首先,我认为Scala为命令式程序员切换到函数式编程提供了一种很棒的过渡语言。 对Java 8 Lambdas的函数式编程有所了解后,Java开发人员会发现自己在Scala中非常满意。 他们仍然可以按照以前的方式进行所有操作,拥有vars和mutable集合,并且掌握了所有标准的Java库。 当然,他们可以开始加深对函数式编程的了解。 因此,Scala提供了从命令式编程到函数式编程的平稳过渡,您可以根据需要快速或缓慢地采用函数式编程。

Scala作为目标语言

过渡到函数式编程后,开发人员会留在Scala,还是像Java一样继续寻找更纯净的语言? 我的意见是不。 从广义上讲,我看到了函数式编程社区中的两个阵营。 第一个阵营将功能编程视为必须遵循的一组法律。 对于这个营地,Scala有很多不必要和/或危险的事情,他们可能不会将Scala视为最终目的地。

第二阵营将函数式编程视为应被广泛利用的强大工具,而不是必须遵循的一组法律。 我站在这里,Scala很好地满足了该营地的需求。 函数式编程在Scala中提供了一流的支持,但您总是可以在必要时退回当务之急。 我怀疑大多数Java社区都倾向于加入这一阵营,否则,他们将已经回避Java并编写Haskell。 因此,我认为Java 8 Lambda对于Scala将会非常有用,因为它们使Java开发人员可以了解Scala将为他们做些什么,从而将大量精力集中到Scala开发中。

参考: Java 8 Lambdas – James and Beth Roper的博客博客中缺少我们的JCG合作伙伴 James Roper 离开Java 的链接 。

翻译自: https://www.javacodegeeks.com/2013/04/java-8-lambdas-the-missing-link-to-moving-away-from-java.html

lambdas for

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吉林省2021高考成绩排名查询,2021年吉林高考成绩排名查询系统,吉林高考位次排名表...

最近好多家长和考生留言,希望知道:吉林高考位次是什么?吉林高考位次与名次的区别?如何根据位次选大学?2020年吉林高考位次就是指考生高考成绩在全省同类考生中的位置。高考位次主要分为三大类:省市位次、区…

Picocli 2.0:类固醇上的Groovy脚本

Picocli 2.0增加了对其他JVM语言(尤其是Groovy)的支持。 当Groovy语言具有CliBuilder类的内置CLI支持时,为什么要使用picocli? 您可能会喜欢picocli的使用帮助,默认情况下会显示ANSI 颜色和样式 。 您可能喜欢的另一个…

angular字符串转成html,详解angular如何调用HTML字符串的方法

详解angular如何调用HTML字符串的方法前面的文章我们介绍过angular6.0的数据绑定,也就是前面页面如何调用后台的数据,我们接触到了调用普通数据——如:调用产品详情{{post.content}}。在使用中,我们会发现,如果按原来的…

西南交大计算机几个专业,西南交通大学计算机科学与技术专业

西南交通大学计算机科学与技术专业计算机科学与技术专业解读计算机科学与技术专业我校早在60年代初就创办了计算机技术专业,是全国较早设立该专业的高等学校之一。1978年由中科院院士曹建猷教授等主持恢复开办计算机科学及应用专业,1981年在国内首批获得…

模拟耗时操作_在集成测试中模拟耗时的动作

模拟耗时操作最近在我的一个项目中,我遇到一种情况,需要为该应用程序创建集成测试。 这不是很奇怪,不是吗? 有趣的是,应用程序的逻辑涉及一些并发问题,并且其中一个组件必须连接到外部服务,这将…

日志消息是可执行代码和注释

尽管在一个人的代码中应添加多少注释之间存在意见分歧,但我认为可以肯定地说,大多数开发人员都同意以下代码段中的注释是多余的: // increment the total total;在该示例中,代码很简单,并且实际上是不言自明的&#x…

代做html网页多少钱,代做排名网站有吗,做排名帮你实现财富自由

影响关键词排名的因素有哪些:1、影响搜索排序的因素前一段,我们在百度搜索排序规则中,实际上已经讨论过这个话题,其中核心的因素主要包括如下内容:① 网站主体与主题的权威度。② 页面内容的专业性以及多样化。③ 网站…

html flash层级,解决FLASH遮住其他层元素问题

刚做了个幻灯片广告,产品人员需要在第一个位置放flash,然后其他的都是图片,但是幻灯片切换到第一张的时候,圆圈tab元素不见了,只有在谷歌浏览器下面正常,用firebug看是被flash盖住了,&#xff0…

电脑没有使用计算机进入睡眠状态,电脑打不开,屏上显示:无视频输入,进入睡眠模式。怎么处理...

1、电脑能正常打开电源,并进行coms自检,但就是不能启动操作系统。光标在黑屏上闪烁,有提示:“Press any key to restar computer.”1)我碰到的这种情况解之道是检查软驱中是否有软盘。为什么要这样做呢,因为很多人的机…

prng伪随机数生成器_Java伪随机数生成器(PRNG)中的弱点

prng伪随机数生成器这将是Kai Michaelis,JrgSchwenk和我撰写的论文的总结,该论文在RSA Conference 2013的密码学家会议上发表 。 你可以得到我的演讲的幻灯片在这里和我们的全文在这里 。 我们对PRNG(主要是SecureRandom)附带的常…

时钟在微型计算机中作用,微型计算机系统中的实时时钟

实时时钟(RTC)是一种IC,可以跟踪当前时间。微处理器通常可以通过串行接口读取此信息,以方便软件执行与时间有关的功能。RTC专为超低功耗而设计,因为它们通常在主系统断电时仍可继续运行。这样一来,他们就可以根据绝对时间基准(通常…

五个使Java变得更好的功能

我偶然发现了Brian Goetz 提出的有关Java数据类的建议 ,立即意识到我也对如何使Java更好地成为一种语言有一些想法。 我实际上有很多,但这只是五个最重要的列表。 专制(2006),迈克贾奇(Mike Judge&#xf…

nit计算机应用基础是考试大纲,NIT考试大纲--计算机应用基础.doc

NIT考试大纲--计算机应用基础.doc全国计算机应用技术证书考试大纲【 HYPERLINK "javascript:doPrint()" 打印】【字体: HYPERLINK "javascript:doZoom(16)" 大 HYPERLINK "javascript:doZoom(14)" 中 HYPERLINK "javascript:doZ…

html选中列表整列变色,excel选中行变色完整代码和动画效果

内容提要:文章介绍excel选中行变色的效果以及实现选中行变色的VBA代码。在excel中如果行数过多,经常核对数据的准确性,容易错行跳行,所以才有本文的小技巧:excel选中行变色。当我们在excel工作表中,鼠标随便…

java 递归改非递归_使用Java ThreadLocals的意外递归保护

java 递归改非递归对于那些使用第三方工具来尝试扩展它们而又不完全了解它们的人来说,这是一个小技巧。 假定以下情况: 您想扩展一个展示分层数据模型的库(假设您要扩展Apache Jackrabbit ) 该库在访问内容存储库的任何节点之前…

大连理工18秋计算机应用基础,大连理工大学网络教育本科计算机应用基础入学考试模拟题...

大连理工大学网络教育本科计算机应用基础入学考试模拟题一、单选题1. 世界上第一台电子数字计算机采用的电子器件是______。A.大规模集成电路 B.集成电路C.晶体管 D.电子管2. 将计算机分为巨型机、大中型机、小型机、微型机、工作站等五类的分类标准是______。A.计算机处理数据…

构造函数还是静态工厂方法?

我相信Joshua Bloch在他的非常好的书“ Effective Java”中首先说了它:与构造函数相比,静态工厂方法是实例化对象的首选方法。 我不同意。 不仅因为我相信静态方法是纯粹的邪恶,而且主要是因为在这种特殊情况下,它们伪装成好的方法…

html vue分页,Vue.js bootstrap前端实现分页和排序

写之前先抱怨几句。本来一心一意做.net开发的,渐渐地成了只做前端。最近项目基本都用java做后台,我们这些.net的就成了前端,不是用wpf做界面,就是用html写web页面。深知自己前端技术不足,以前虽说用asp.net前后台都做&…

福建计算机及应用专业的大学,33所福建大学公布国家级/省级一流本科专业!

近日,教育部发布《教育部办公厅关于公布2020年度国家级和省级一流本科专业建设点名单的通知》。据悉,本次教育部一流本科专业建设“双万计划”评选共认定了3977个国家级一流本科专业建设点,其中中央赛道1387个、地方赛道2590个,并…

高度有用的Java ChronoUnit枚举

几年前,我发表了博客文章“ The Highly有用的Java TimeUnit Enum ”,其中介绍了JDK 5引入的TimeUnit枚举。 JDK 8引入了一个更新的枚举ChronoUnit ,它比TimeUnit更适合于诸如日期/时间操作等并发以外的上下文。 位于所述java.time.temporal包…