Java平台新的利器——Groovy语言

liudun 2009-05-20
PS:近期准备学习Groovy语言,归纳和收集了一些Groovy的知识。不正之处,欢迎斧正!^_^
官方站点:http://groovy.codehaus.org/ ; http://www.grails.org/
What,什么是Groovy?
Groovy:
1.是一个敏捷的、动态的基于Java虚拟机的编程语言
2.以Java语言的长处作为基础,但添加了一些来自于Python、Ruby和Smalltalk等语言的强大功能
3.几乎为0的学习曲线,就将现代编程语言的特性带给了Java开发者
4.支持DSL(Domain-Specific Languages)和其它简洁的语法,所以代码更易读和易维护
5.使得编写shell和构建脚本更简单
6.减少了在开发web、GUI、database或控制台程序时编写的基础代码,提高开发者的生产率
7.对单元测试和mock提供支持,使它们更简单的使用
8.能无缝地与现有的Java对象和库进行集成
9.编译成Java字节码,所以你可以在任何使用java的地方引用groovy编写的对象和库
......
有人说Groovy是Java帝国的王储,江南白衣说它是Java的“私生子”。我觉得Groovy就像是Java这棵大树上新长出来的粗壮的树枝。

Groovy就像一个“超级Java版本”,它不仅具有Java企业级开发的能力,也具有一些很酷的提高生产率的特性(比如闭包、动态类型)。如果你是开发人员、测试人员或者脚本编写人员,你一定会喜欢groovy。

基于Groovy语言最著名的框架算是Grails了,名称大概来自于Ruby的Rails框架。Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,从而为大家带来一套能实现超高生产力的一站式框架。


Where,它与Java有哪些不同?

1.默认导入以下库,所以在groovy中无需再import:
    *  java.io.*
    * java.lang.*
    * java.math.BigDecimal
    * java.math.BigInteger
    * java.net.*
    * java.util.*
    * groovy.lang.*
    * groovy.util.*

2.以下是Java开发者刚开始使用groovy时常犯的错误:
    2.1==操作符表示整个类型的比较。在Java里面,==表示比较原始类型的值或者比较对象的标识符(引用)。但在groovy里面采用了自动装箱后,这会让Java开发者感到困惑,groovy里面==就等价于equals()。如果你是在需要比较对象的标识符,可以使用is()方法,如foo.is(bar);
    2.2'in'是一个关键字,所以不能给变量起名为in了。;
    2.3要定义数组,不能像Java里int[] a = {1,2,3};这样写,必须写成int[] a = [1,2,3]的样式;

3.必需要知道的一些语法特性:
    3.1每句代码后的分号‘ ; ’是可选的;
    3.2方法里面的return关键字也是可选的;
    3.3静态方法内也可以使用this关键字,表示引用到当前类(而不是类实例);
    3.4默认情况下,类和方法都是public的;
    3.5暂时不支持内部类,通常你可以使用groovy的闭包特性替代;
    3.6方法签名上的throws子句不受编译器检查,因为groovy内检查异常和非检查异常没有区别;
    3.7在groovy里,如果你像在Java里面那样使用未定义的类成员或者传递错误类型的参数,不会收到编译器错误。

4.Groovy中Java没有的特性
    4.1闭包
    4.2对List、Map等容器的本地语法支持
    4.3正则表达式的本地支持
    4.4多态的迭代器和强大的switch语句(支持string等类型)
    4.5同时支持动态和静态类型,所以在方法、类成员和局部变量都可以省略类型声明
    4.6string里面可以嵌入string。比如 'he said "cheese!" again'
    4.7新增许多新的helper方法到JDK
    4.8编写bean更简单,添加事件监听器也更简单
    4.9使用?操作符完成安全的引用导航。比如要调用foo对象的bar()方法,为了防止类似java的NullPointerException,可以写成foo?.bar()。这样减少很多判断为null的代码。

参考来源:http://groovy.codehaus.org/Differences+from+Java
更多其它的与Java的区别,请参考另外一个现成的帖子:http://www.blogjava.net/BlueSUN/archive/2007/03/10/103014.html


Why,为什么使用Groovy?
1.它能无缝与Java集成,随处使用现有的Java库,能和Java相互调用。这是最重要的前提。
2.Groovy的目标之一是简化开发,它从语言级别帮开发者节省很多代码。
3.由于是动态类型的语言,在极限编程等注重测试的开发过程中,Groovy能更快捷地随时开展测试。

当然,脚本语言是不会取代系统编程语言的,它们会相辅相成。系统编程语言一般用在大型的、计算密集的、需求变更慢的项目中,而脚本语言则适合用在GUI、模块粘合、快速变化的小型项目中。
tantec 2009-05-20
小伙子有前途。。。学习学习
ayufox 2009-05-20
第一,我觉得语言变革带来的生产力的提升不会非常之大,我们必须注意到,在软件生命周期中,最多也就大概只有1/6的时间花费在编码之上,其他的时间我们会花费在需求、计划、设计、测试、沟通、文档等等等等之上;
第二,我们假设语言本身给我们带来非常多的方便性,但实际上,我们还需要考虑是否有很好的支持工具,是否具备足够的简易性以适应团队的开发(越灵活的语言我觉得越不适合团队开发),是否有足够的社区支持以处理碰到的问题,是否足够稳定以能应用到产品环境,是否......
第三,就Groovy语言而论,动态语言我觉得有一点很致命,很难有很好的IDE支持(也许我是错的),失去工具的支持,足以把它带来的好处通通抵消掉;
最后,支持一下,无论如何,了解一下我们熟悉的领域之外的东西,总不会是坏事,不过我觉得需要注意,别贪多嚼不烂
liudun 2009-05-20
ayufox 写道
第一,我觉得语言变革带来的生产力的提升不会非常之大,我们必须注意到,在软件生命周期中,最多也就大概只有1/6的时间花费在编码之上,其他的时间我们会花费在需求、计划、设计、测试、沟通、文档等等等等之上;
第二,我们假设语言本身给我们带来非常多的方便性,但实际上,我们还需要考虑是否有很好的支持工具,是否具备足够的简易性以适应团队的开发(越灵活的语言我觉得越不适合团队开发),是否有足够的社区支持以处理碰到的问题,是否足够稳定以能应用到产品环境,是否......
第三,就Groovy语言而论,动态语言我觉得有一点很致命,很难有很好的IDE支持(也许我是错的),失去工具的支持,足以把它带来的好处通通抵消掉;
最后,支持一下,无论如何,了解一下我们熟悉的领域之外的东西,总不会是坏事,不过我觉得需要注意,别贪多嚼不烂


嗯,明白了。业余玩玩。
你说的很有道理。像Java、C#这类系统级编程语言,短期内是无法取代的。比如Java,IBM、Oracle、Nokia等那么多IT巨头投入了那么多,怎么可能这么快被这些小动态语言取代呢?
ayufox 2009-05-20
很多语言都很优秀,但看起来,一门语言的应用,其实很多都是取决于语言之外的东西
tantec 2009-05-20
我的想法是,先熟悉一条线上的技术,例如我们开发中用到的技术,逐一掌握,然后再慢慢扩展开来,根据兴趣研究些其他的东西。
ayufox 2009-05-20
tantec 写道
我的想法是,先熟悉一条线上的技术,例如我们开发中用到的技术,逐一掌握,然后再慢慢扩展开来,根据兴趣研究些其他的东西。


赞一个,学习东西还是要有主有次,最怕眉毛胡子一把抓
Xorcerer 2009-05-20
liudun 写道

嗯,明白了。业余玩玩。
你说的很有道理。像Java、C#这类系统级编程语言,短期内是无法取代的。比如Java,IBM、Oracle、Nokia等那么多IT巨头投入了那么多,怎么可能这么快被这些小动态语言取代呢?

C#正在走向动态。
whaosoft 2009-05-20
呃 回来我也学学 不能太落伍了
hankesi2000 2009-05-20
很支持tantec 的说法,技术还是要先精,对各种事务都有个大体的了解,以后学习其他的也会简单
Global site tag (gtag.js) - Google Analytics