Groovy入门教程

Posted 咕噜大大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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”可以省略,会按代码块中最后一句表达式的结果来返回值.



以上是关于Groovy入门教程的主要内容,如果未能解决你的问题,请参考以下文章

Groovy入门教程

Groovy入门教程

Groovy入门(2-2)Groovy的eclipse插件安装

java - groovy 执行 实例

java - groovy 执行 实例

java - groovy 执行 实例