我们为什么要用lambda

lambda并非是Java首创,准确地来说,是Java迎合时代的产物


lambda的好处很显而易见,易读,更好理解(可能对于新手来说不是太好写)。易读的好处带来的就是易维护,不容易出错。


在编程语言的发展史上,从机器语言到汇编语言,再到高级语言,以及下一代的自然语言(也不知道啥时候会出现),是以可读性为基础的,而不是以性能为基础的。因为可读性的变化,才使得语言的进一步发展。

这里也声明下,不是说对于编程语言来说,性能不重要,而是说,一定程度上,可以损耗一定的性能来换取可读性及易维护性。甚至对于性能要求不高的产品来说,完全可以用易维护性来换取性能。

在我开始学习代码的时候,汇编还没有完全退出历史的舞台,但是已经是主要用于编写驱动,但是也只是很核心的部分,很大程度上已经是由C或C++来完成了。现在还剩下多少的汇编代码呢,或者说,专门学习汇编的人还有多少?

Java又是凭借什么占有了高级语言的TOP之一,比性能,它和C,C++差距不小。其原因在我看来,是易用性,多平台通用性,开源社区广泛,易维护。没有性能哦。

对于需要性能的的应用,比如说数据库,硬件驱动,还是不建议使用Java,不太合适。


有人或机构测试,JDK8的lambda的性能是同样foreach或iterator性能的5倍之大,相关的代码我也试过,其结果可能没有测试时这么大,但是3倍还是有的。

但是,你们的测试标准不对,lambda不应该和iterator对比的,lambda的实现是匿名类哦。我也看过相关的lambda和相关的匿名类的测试,其结果是相差不大的。

详见:http://www.oracle.com/technetwork/java/jvmls2013kuksen-2014088.pdf


但是,可以相像一下,为什么性能差距会有5倍呢?很简单,因为你的内部类逻辑很简单,性能消耗很低,所以,性能很大程度上消耗在了调用上。我看过一篇文章(http://www.importnew.com/15873.html,看异常栈输出),上面说到,使用lambda,比普通地调用了个循环,在调用层次上多了11次调用,你可以相像其性能消耗

看过一句话,易读性就代表地易维护性,而对于运维而言,这个特点可比你性能高特点更出众,性能低,在目前分布式系统来说,多加机器就可以解决的事不是事啊。


对于高级语言来说,只要性能上没有太大的差距,那其实就并不多,我们不会为那10%-20%而去更换一种语言,企业也不会为低于50%以内的性能而考虑更换一种语言。但是如果出现一种语言,性能降低50%(降低的部分不包括磁盘),但是易读性,可维护性提升一倍,那么我估计很多企业会采用这种方式。因为可读性就意味着好维护,不容易出错。


想像一下,生产出一次错误,会造成直接或间接的经济损失有多少?并且可读性的提升,就意味地开发或后期维护的工作量会一定程度上的降低,那会减少一些人力成本,又会为企业减少支出。至于机器,成本比人低太多了,除非真的资源不足或产能严重不足,导致服务器资源……


想像下,以前的应用是多么小巧,现在的应用。尤其是手机,以前一个游戏,几M是有的哦,现在几G的都大有人在,并且,普通的应用几百M很正常。


lambda其实在一般地情况下,没有这么高大上,但是这个语法让我们更好地去写代码,更好地去维护代码

你可能感兴趣的:(我们为什么要用lambda)