设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

JVM 平台上的各种语言的开发指南2

2013-7-9 14:16| 发布者: 红黑魂| 查看: 3084| 评论: 0|来自: 51CTO

摘要: Groovy“Groovy有超过Java将能够提供的甜点,例如它具有轻易地在宿主程序中嵌入并编译,以提供定制业务规则的能力,还有它如何为领域特定语言(Domain-Specific Language)提供优雅,简洁并且可读性好的语法的能力.” ...

Groovy

“Groovy有超过Java将能够提供的甜点,例如它具有轻易地在宿主程序中嵌入并编译,以提供定制业务规则的能力,还有它如何为领域特定语言(Domain-Specific Language)提供优雅,简洁并且可读性好的语法的能力.”
Guillaume Laforge,
Groovy的项目带头人

Groovy入门

Groovy并不像我们在这个报告中涵盖的一些语言那样具有冒险性质,但绝对是你应该感兴趣的一种JVM语言。它已经成为了一种受到开发者信任的成熟选择,这时Java开发商的伤害,以及动态类型这些都不是问题。

无论如何,我都不会是那种争论何时给玩转一种编程语言一次机会的人。

Java变得过分充实

Java开发者可以在Groovy中深入编程并且变得多产。匹配Java的语言有希望或者这看起来将会是未来的趋势,2.0发行版中已经加入了Java7项目的Coin增强.另外Groovy还使得日常使用Java遇到的坎坷变得平滑。安全的导航(?.)以及 Elvis(?:)都算是很棒的例子。

// streetName will be null if user or
// user.address is null - no NPE thrown
def streetName = user?.address?.street
// traditional ternary operator usage
def displayName = user.name ? user.name : "Anonymous"
// more compact Elvis operator - does same as above
def displayName = user.name ?: "Anonymous"

“Groovy是一种多样性的JVM语言.使用一种同Java相近的语法,这种语言是易学的,并且允许你编写从脚本到完整的应用程序代码,包括强大的 DSL(领域特定语言)。Groovy很可能是JVM上唯一使得运行时的元编程、编译时的元编程、动态类型以及静态类型容易处理的语言。” 

CÉDRIC CHAMPEAU, 
Groovy中的高级软件工程师

闭包(Closure)

我们预期Groovy将止步于句法功能,然而我们却在文档中又发现“闭包”。为什么称这超越了我们的预期呢,因为Groovy函数值中的一等公民、更高级别的函数以及lambda表达式,这些都得到了支持。

square = { it * it } // ‘it’ refers to value passed to the function
[ 1, 2, 3, 4 ].collect(square) // [2, 4, 9, 16]

标准库对于闭包恰到好处的应用使得使用它们成为一种享受,并且也证明了它们的实力。下面是使用闭包的语法糖作为方法后面参数的好例子:

def list = ['a','b','c','d']
def newList = []
list.collect( newList ) {
 it.toUpperCase()
}
println newList // [A, B, C, D]

集合

几乎所有的应用程序都依赖于集合。不幸的是集合大量的戳到了Java的痛处。而如果你怀疑我的这种说法,请尝试做一些有趣的JSON操作。Groovy为集合的定义将原有的语法打包,并且为了强大的可操作能力,着重使用了闭包。

def names = ["Ted", "Fred", "Jed", "Ned"]
println names //[Ted, Fred, Jed, Ned]
def shortNames = names.findAll { it.size() <= 3 }
println shortNames.size() // 3
shortNames.each { println it } // Ted
                               // Jed
                               // Ned

静态类型

人们常常振奋于动态语言,因为你用很少的代码就能获得更多的功能。这常常很少被理解,而剩下的被带回去维护。因此我们能够看到越来越多的动态语言获得静态类型,而且反之亦然。

Groovy2.0加入了静态类型

静态类型缘何且如何提升了Groovy?

“静态检查使得从Java到Groovy的转型的之路更加的平滑。许多人加入(后续还有更多人加入)Groovy,因为它轻量级的语法,以及所有被移除的 样板,但是,举个例子,不想(或者不需要)使用动态特性。他们往往很难理解Groovy编译时不像他们以前那样抛出错误,因为他们实在是不能理解 Groovy是一门动态语言。对于他们来说,我们现在有了@TypeChecked。第二个原因是性能表现,由于Groovy仍然支持更老的JDK(现在 是1.5),而动态调用支持对它们不可用,因此为了代码的关键性能部分,你可以有静态的编译了的代码。还要注意的是,静态编译对于那些想要免受猴急修补 (monkey patching)的框架开发者来说是有趣的(基于能够在运行时改变一个方法的行为这一事实)。”

Cédric Champeau
Groovy的高级程序工程师

Groovy也不例外,静态检查可以通过相关代码中的@Typechecked注解实现.

import groovy.transform.TypeChecked
void someMethod() {} <&br>
@TypeChecked
void test() {
   // compilation error:
   // cannot find matching method sommeeMethod()
sommeeMethod()
def name = "Marion"
// compilation error:
// the variable naaammme is undeclared
println naaammme
}

酷毙
2

雷人

鲜花

鸡蛋
1

漂亮

刚表态过的朋友 (3 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部