仓酷云

标题: 了解下JAVA的Java 下一代: 没有承继性的扩大(二)探究 Clojure 协定 [打印本页]

作者: 爱飞    时间: 2015-1-18 10:59
标题: 了解下JAVA的Java 下一代: 没有承继性的扩大(二)探究 Clojure 协定
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的
“没有承继性的扩大,第1部分”次要会商了Goovy、Scala和Clojure中为现有类增加新办法的机制,这也是Java下一代言语完成无承继扩大的办法之一。本文将切磋Clojure的协定怎样以立异的办法拓展Java扩大功效,为表达式成绩供应杰出的办理计划。
只管这期文章次要存眷可扩大性,但也会略为触及一些同意Clojure和Java代码无缝互操纵的Clojure特征。这两种言语有着基本性的不同(Java是命令式、面向对象的;而Clojure是函数式的),但Clojure完成了一些便利的特征,使Clojure可以在确保最小磨擦的条件下处置Java布局。
Clojure协定回忆
协定是Clojure生态体系的主要构成部分。上一期文章展现了怎样利用协定向现有类增加办法。协定也能匡助Clojure摹拟面向对象的言语的为人熟知的很多特征。比方,Clojure可摹拟面向对象的类—数据与办法的组合,办法是经由过程协定将纪录与函数绑定在一同的。为了了解协定与纪录之间的交互,起首必需先容映照,这是作为Clojure中纪录基本的中心数据布局。
映照与纪录
在Clojure中,映照就是一组称号-值对的汇合(其他言语中罕见的观点)。比方,清单1中的“读取-求值-打印”轮回(REPL)的第一步就是创立一个包括有关Clojure编程言语信息的映照:
清单1.与Clojure映照交互
  1. user=>(deflanguage{:name"Clojure":designer"Hickey"})
  2. #user/language
  3. user=>(getlanguage:name)
  4. "Clojure"
  5. user=>(:namelanguage)
  6. "Clojure"
  7. user=>(:designerlanguage)
  8. "Hickey"
复制代码
Clojure普遍利用映照,因而个中包括特别的语法糖,可简化与映照的交互。为检索与某个键有关的值,您可使用熟习的(get)函数。但Clojure会尽量地简化此类经常使用操纵。
本栏目更多出色内容:http://www.bianceng.cn/Programming/Java/
在Java情况中,言语的源代码并不是原生数据布局,必需对它举行剖析和转换。在Clojure(和其他Lisp变体)中,源代码暗示属于原生数据布局,好比列表,列表有助于注释言语中的奇异语法。在Lisp注释器将列表作为源代码读取时,它会实验着将列表的第一个元素注释为某些可挪用的元素,好比函数。因而在清单1中,(:namelanguage)表达式将前往与(getlanguage:name)表达式不异的了局。Clojure之以是供应这类语法糖,是由于从映照中检索项目属于经常使用操纵。
别的,在Clojure中,某些布局可放在函数挪用插槽中,这扩大了可挪用性(像挪用函数一样挪用这些布局的才能)。Java程序只能够挪用办法和内置言语语句。清单1展现了映照键(如(:namelanguage))在Clojure中可作为函数加以挪用。映照自己也是可挪用的;假如您以为替换语法(language:name)更简单浏览,也能够利用这类替换语法。Clojure丰厚的可挪用图表使得这类言语更容易于利用,从而削减了反复的语法(比方Java程序中罕见的get和set)。
但是,映照其实不能完整摹拟JVM类。Clojure供应了其他办法来匡助您建模包含数据和举动在内的成绩,加倍无缝地集成底层JVM。您能够创立对应于相似的底层JVM类且完全性各有分歧的多种布局,包含范例和纪录在内。您可使用(deftype)创立一个范例,一般用该范例来建模机器布局。比方,假如您必要一个数据范例来持有XML,那末很有大概会利用(deftypeMyXMLStructure)暗示XML内嵌的数据提取布局。在Clojure中,习气于利用纪录取得数据,信息纪录是使用程序的中心。为撑持这类用法,Clojure将在包括可挪用性等特征的底层纪录界说中主动包括大批接口。清单2中的REPL交互演示了纪录的底层类和超类:
清单2.纪录的底层类和超类
  1. user=>(defrecordPerson[nameagepostal])
  2. user.Person
  3. user=>(defbob(Person."Bob"4260601))
  4. #user/bob
  5. user=>(:namebob)
  6. "Bob"
  7. user=>(classbob)
  8. user.Person
  9. user=>(supers(classbob))
  10. #{java.io.Serializableclojure.lang.Countedjava.lang.Object
  11. clojure.lang.IKeywordLookupclojure.lang.IPersistentMap
  12. clojure.lang.Associativeclojure.lang.IMeta
  13. clojure.lang.IPersistentCollectionjava.util.Map
  14. clojure.lang.IRecordclojure.lang.IObjjava.lang.Iterable
  15. clojure.lang.Seqableclojure.lang.ILookup}
复制代码
在清单2中,我创立了一个名为Person的新纪录,它包括用于name、age和postal代码的字段。我可使用Clojure针对机关函数挪用的语法糖来机关此类新纪录(利用类称号加一个句点作为函数挪用)。前往值为带着名称空间的实例。(默许情形下,一切REPL交互都产生在user称号空间内。)可挪用性划定规矩仍旧存在,因而我可使用清单1展现的语法糖来会见纪录的成员。
挪用(class)函数时,它将前往Clojure创立的称号空间和类名(可与Java代码交互)。我还可使用(supers)来会见Person的超class。在清单2的最初四行中,Clojure完成了几个接口,包含IPersistentMap等可伸缩性接口,该接口同意利用Clojure的原生映照语法来处置类和对象。主动包括的一组接口是纪录与范例之间的一个主要不同,范例不包括任何主动接话柄现。
<p>
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。
作者: 飘飘悠悠    时间: 2015-1-20 12:30
Java 编程语言的风格十分接近C、C++语言。
作者: 小妖女    时间: 2015-1-22 08:30
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者: 精灵巫婆    时间: 2015-1-29 06:17
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者: 简单生活    时间: 2015-2-5 18:52
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 兰色精灵    时间: 2015-2-13 04:51
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者: 金色的骷髅    时间: 2015-3-3 14:02
Java 编程语言的风格十分接近C、C++语言。
作者: 愤怒的大鸟    时间: 2015-3-11 11:12
是一种突破用户端机器环境和CPU
作者: 仓酷云    时间: 2015-3-18 07:48
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者: 老尸    时间: 2015-3-25 13:26
是一种突破用户端机器环境和CPU




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2