仓酷云
标题:
发布一篇Java 下一代: Groovy、Scala 和 Clojure 中的配合点(一)
[打印本页]
作者:
简单生活
时间:
2015-1-18 11:02
标题:
发布一篇Java 下一代: Groovy、Scala 和 Clojure 中的配合点(一)
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。
探求这些下一代JVM言语怎样处置操纵符重载
编程言语中的好理念能够持续并扩大到其他言语,就像琼浆一样耐久弥喷鼻。因而,不敷奇异的是,Java下一代言语—Groovy、Scala和Clojure—具有良多配合的特征。在本期和下一期Java下一代文章中,我将切磋每种言语语法中功能清单的分歧性。我从可以重载操纵符这个特征提及—克制了Java言语中临时存在的一个弱点。
操纵符重载
假如您改革过JavaBigDecimal类,大概看到过相似于清单1的代码:
清单1.Java代码中的LacklusterBigDecimal撑持
BigDecimalop1=newBigDecimal(1e12);
BigDecimalop2=newBigDecimal(2.2e9);
//(op1+(op2*2))/(op1/(op1+(op2*1.5e2))
BigDecimallhs=op1.add(op2.multiply(BigDecimal.valueOf(2)));
BigDecimalrhs=op1.centeride(
op1.add(op2.multiply(BigDecimal.valueOf(1.5e2))),
RoundingMode.HALF_UP);
BigDecimalresult=lhs.centeride(rhs);
System.out.println(String.format("%,.2f",result));
复制代码
在清单1中,我试图完成正文中的这个公式。在Java编程中,因没法重载数学操纵符,使得我只能乞助于办法挪用。静态导进能够办理成绩,可是关于所选择的高低文,明显必要得当的操纵符重载。最后的Java工程师存心从言语上疏忽操纵符重载,不外这感到增添了太年夜的庞大性。但是履历标明,因缺少这一特征而强加给开辟职员的庞大性愈甚于潜伏的滥用时机。
用略微各不不异的体例,一切三种Java下一代言语都完成了操纵符重载。
Scala的操纵符
Scala经由过程保持操纵符与办法之间的区别而同意操纵符重载。操纵符只不外是具有特别称号的办法。比方,要重写乘法操纵符,能够重写*办法。[*是一个无效的办法称号,这就是Scala利用下划线(_)标记而不是Java星号(*)标记来代表导进的缘故原由之一。]
我利用单数来讲明重载。单数是一种数学暗示,包含实部和虚部,比方一般写作3+4i如许的情势。单数在良多迷信范畴都很罕见,包含工程学、物理学、电磁学和其他实际。清单2显现了单数的Scala完成:
清单2.Scala单数
finalclassComplex(valreal:Int,valimaginary:Int){
require(real!=0||imaginary!=0)
def+(operand:Complex)=
newComplex(real+operand.real,imaginary+operand.imaginary)
def+(operand:Int)=
newComplex(real+operand,imaginary)
def-(operand:Complex)=
newComplex(real-operand.real,imaginary-operand.imaginary)
def-(operand:Int)=
newComplex(real-operand,imaginary)
def*(operand:Complex)=
newComplex(real*operand.real-imaginary*operand.imaginary,
real*operand.imaginary+imaginary*operand.real)
overridedeftoString()=
real+(if(imaginary<0)""else"+")+imaginary+"i"
overridedefequals(that:Any)=thatmatch{
caseother:Complex=>(real==other.real)&&(imaginary==other.imaginary)
case_=>false
}
overridedefhashCode():Int=
41*((41+real)+imaginary)
}
复制代码
Scala经由过程折叠不用要的脚手架代码,年夜年夜下降了Java言语的鲁潭取@纾清单2中,类中的机关函数参数和字段与类界说一同呈现。在本例中,类的主体充任机关函数,以是对require()办法的挪用在第一次实例化操纵过程当中考证值的存在。由于Scala主动供应字段,以是类的其他部分包括办法界说。关于+、-和*操纵符,我都声了然承受Complex数作为参数的同名办法。单数的乘法不及加法和减法那末直不雅。清单2中已重载的*办法完成公式:
(x+yi)(u+vi)=(xu-yv)+(xv+yu)i
<p>
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉,
作者:
不帅
时间:
2015-1-20 12:55
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者:
愤怒的大鸟
时间:
2015-1-20 22:38
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者:
冷月葬花魂
时间:
2015-1-25 21:35
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者:
兰色精灵
时间:
2015-1-26 17:02
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者:
谁可相欹
时间:
2015-1-27 10:13
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者:
若天明
时间:
2015-2-1 11:42
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者:
金色的骷髅
时间:
2015-2-2 13:26
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
蒙在股里
时间:
2015-2-7 21:05
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
老尸
时间:
2015-2-23 10:48
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者:
第二个灵魂
时间:
2015-3-7 08:07
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者:
因胸联盟
时间:
2015-3-14 15:06
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者:
分手快乐
时间:
2015-3-21 10:56
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2