Groovy入门教程

HELLO!大家好!我是咕噜大大,专注编程和单身30年!

尊重原创,请大家转载时注明该文章来自:http://blog.csdn.net/ymh198816/article/details/43817435


最近我的BOSS要开始一个新的电商项目,并初步定下开发语言为Java,因为扩展性好,安全性高,再加上中国满大街的Java开发人员和铺天盖地的Java开发资料,都让我们觉得在人力资源和开发方面会比较有保障。但是后来我们在确定开发框架的时候就拿不定主意了,有部分人认为应该使用目前普遍流行的SSH框架(Struts2+Spring+Hibernate), 还有部分人希望使用现在发展迅猛的Grails框架,因为Grails是一个站式服务的框架,开发速度会比SSH框架更快。但问题是在中国使用和了解该框架的人少得可怜,而且又是一个比较年轻的框架,稳定性和扩展性都需要经过时间的考验和积累,大部分人还是持观望的态度。更加有趣的地方在于Grails使用的不是源生的Java语言,而是使用Groovy来作为该框架的开发语言。刚好最近在做Grails框架的调研,所以就顺便写一篇Groovy的入门教程,希望能帮助更多的人了解Groovy这门语言。


根据Groovy的官方文档对该门语言的介绍,我们可以了解到Groovy有如下特性:

1. Groovy是运行在JVM(Java Virtual Machine)上的敏捷的动态语言,所以Groovy也是一门弱类型的语言,并且可以直接编译成Java字节编码,运行在任何具备Java运行环境(JVM)的设备上。

2. 摒弃了Java语言中少部分存在争议和不便于敏捷开发的部分,并结合了Ruby和Python等其它语言的优秀特性,像动态类型,闭包等,使得Groovy这门语言对开发人员更加友好并易于维护。

3. 能和所有的Java类库无缝对接。

4. 大部分语法和特性和Java类似,使得Java开发人员对Groovy这门语言的学习曲线近乎为零。

5. 新加入Assert方法,方便程序员做单元测试


安装GROOVY

接下来我们开始介绍Groovy的安装方式(MAC OS):

1. 打开你的Ternimal,并输入以下命令设置你系统中Groovy的binary文件地址:

>> export GROOVY_HOME=~/your/groovy/path

2. 并将GROOVY_HOME/bin配置进系统中path环境中,并写进bash文件中,这样就能在terminal中调用Groovy相关的命令

>> GROOVY=$GROOVY_HOME/bin

>> echo "export PATH=$GROOVY:$PATH" >> ~/.bash_profile


接下来重启你的terminal,然后输入 >>groovysh,如果你看见下面的画面,那么证明你的GROOVY安装成功了!!!

不过上面会有一个警告:????: Module [groovy-nio] - Unable to load extension class [org.codehaus.groovy.runtime.NioGroovyMethods] 貌似是没有成功加载某个class,求大牛提供解决方案和解释一下原因大哭大哭大哭我是弱鸡大哭大哭大哭


GROOVY的ECLIPSE插件下载地址:

传送门:http://marketplace.eclipse.org/content/groovygrails-tool-suite-ggts-eclipse-luna-44



GROOVY文件示例:

package com.groovy.fundamental
import java.util.Date;


class basicGrammar {
	def my_list = [3.1415926, "Hello World!!", new Date()];
	def my_map = ['firstAttr':'咕噜大大','secondAttr':11.11,'thirdAttr':my_list];
	
        basicGrammar() {
           super();
        }

        public void printList_java() {
		println my_list.getClass();
		assert my_list.get(1) == "Hello World!!";
	}
	
	def printList_groovy() {
		println my_map.getClass();
		assert my_map.get('thirdAttr')[1] == "H World!!";
	}
	
        
	static main(args) {
		
		def test = new basicGrammar();
		
		test.printList_java();
		test.printList_groovy();
		
	}
}

从上面一个基本的groovy文件中,

1.我们可以发现groovy可以像Java一样使用包管理机制,同时还能引入各种Java工具类;

2. groovy文件中可以让Java和Groovy语法混合使用,因为Groovy最后也是编译成Java的字节码文件,它实际上也是一种Java文件,但加入了自己的一些特性;

3. 类的定义如同Java一样;

4. 使用def来定义变量,并根据变量的值来动态改变变量的类型;

5. 定义main方法时,不用声明方法的作用域,默认为public,也可以不用声明方法的返回参数类型,同时方法中参数也可以不用声明类型,因为Groovy本身就是一个弱类型的语言。类中的构造函数也类似;

6. 包含了assert方法,方便去做单元测试。

从上面输入的内容我们可以看见Groovy中提供的assert方法十分强大和具体,同时,Groovy中的list对象和map对象分别是java.util.ArrayList对象和java.util.LinkedHashMap对象


部分比较重要的GROOVY语法:

Groovy中定义的最重要的两种数据类型,一种是list(java.util.ArrayList)类型,另一种则是map(java.util.LinkedHashMap)类型,其中list类型在groovy中可以相当Java的数组来使用

定义list:

def my_list = [3.1415926, "Hello World!!", new Date()];

定义map:

def my_map = ['firstAttr':'咕噜大大','secondAttr':11.11,'thirdAttr':my_list];

使用for循环:

for(content in my_list) {
	println content;
			
	}

使用range变量,用法基本与与python的range变量相同:

def myRange = 0..5;

    for(content in myRange) {
            print content;
        }

输出结果:012345

在Groovy中,你可以用“{}”定义一个"方法"来作为一个对象,并像一个String值或int值一样传入一个变量中,这就是闭包函数;在Groovy中一个闭包函数也是一个可被调用的方法:

def my_closure = {param -> println("hello ${param}");println("你好,世界!!")};
my_closure.call("咕噜大大");
如果不定义闭包函数的参数,则Groovy默认会使用“it“来代替这些参数:

def my_closure = {println("hello"+it);println("你好,世界!!")};
my_closure.call("咕噜大大");
闭包函数可以作为其它方法里的参数:

def fun(int i, Closure c) {
  c.call(i)
}

使用each函数配合闭包函数循环list对象,与Jquery中的each方法类似,同时也真是each()和闭包函数的作用,list和map的长度就不那么重要了,它们可以不用for循环就能取出里面所有的值了:

["咕噜大大", "萌萌哒", "棒棒哒"].each({ item -> print item })
同时,如果闭包函数是方法里最后的一个参数,那么闭包函数可以写在方法的括号外面

["咕噜大大", "萌萌哒", "棒棒哒"].each(){ item -> print item }
又因为Groovy中调用方法时,在不引起歧义的情况下方法后面的括号可以省略

["咕噜大大", "萌萌哒", "棒棒哒"].each { item -> print item }

关于字符串的处理几乎和Java的String class一模一样,不过Groovy中新添加了“toInteger()”的方法:

println "2014".toInteger();

Groovy和Java的区别

对于定义的浮点数变量,Groovy不会将它们创建成Float或Double对象,默认下为Groovy自己定义的类型 BigDecimal,除非你显示地将该变量指定为Float或Double对象

def my_number = 3.14


在Groovy中你不能再像Java一样用“{}”去定义数组,反而你要用list去取代原先Java中的数组

<pre name="code" class="java">String[]  myArray = {"咕噜大大","萌萌哒"};  这是错的!!!
 
String[]  myArray = ["咕噜大大","萌萌哒"];  这才是对的!!!!


Groovy中的“==”相当于Java中的“equals()”;Groovy中“.is()”相当于Java中的“==”,用来比较两个对象是不是相等;

def x = 5;
def y = 5; 

<pre name="code" class="java">    if(x == y) {
	println("在X == Y条件中x和Y的值相等!");
    } else if (x.is(y)) {
	println("在X is Y条件中X和Y是同一个对象!");
    }

输出结果是:在X == Y条件中x和Y的值相等!          
 
 
 

在Groovy中你可以不写分号,但会引起一些错误,比如说:

class Trial {
  private final Thing thing = new Thing ( ) ;
  { thing.doSomething ( ) ; }
}
这是正确可运行的
class Trial {
  private final thing = new Thing ( )
  { thing.doSomething ( ) }
}
会报“MissingMethodException!”异常,因为”{ thing.doSomething ( ) }“会被认为是一段闭包函数,然后传入Thing()方法中作为它的参数
所以,建议大家还是按Java开发标准来,老老实实在每句sentence的后面写上分号!


Groovy会自动为pojo对象附上set和get方法,你不用手动去设置

JAVA的写法:
class usersBean() {
  String name;

  public void setName(String name) {
     this.name = name
  }
  public String getName() {
     return this.name
}
 }


Groovy的写法:
class usersBean() {
  String name;
}

 

Groovy中,在单引号里的字符串和普通的Java字符串一样,而在双引号里的字符串则能解析 ${param}中的值:

def param = "咕噜大大"

println "大家好!我是${param}!"
println '大家好!我是${param}!'
输出结果是:大家好!我是咕噜大大!

                      大家好!我是${param}!


方法和类都默认是public的;

“return”可以省略,会按代码块中最后一句表达式的结果来返回值.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕噜大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值