Groovy的基础语法

来源:互联网 发布:淘宝导航自定义代码 编辑:程序博客网 时间:2024/05/17 22:59
Groovy 的语法融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同时保留了基于 Java 语言的核心语法。
对于Java 开发人员,Groovy 提供了更简单的替代语言,且几乎不需要学习时间。

语句

Groovy的语句和Java类似,但是有一些特殊的地方。例如语句的分号是可选的。如果每行一个语句,就可以省略分号;

如果一行上有多个语句,则需要用分号来分隔。

x = [1, 2, 3]
println x y = 5; x = y + 7
println x
assert x == 12

另外return关键字在方法的最后是可选的;同样,返回类型也是可选(缺省是Object)。

变量

1、没有类型的java

作为动态语言,groovy中所有的变量都是对象(类似于.net framework,所有对象继承自java.lang.Object),

在声明一个变量时,groovy不要求强制类型声明,仅仅要求变量名前使用关键字def。

def var="hello world"

println var

println var.class

你可以看到程序最后输出了var的实际类型为:java.lang.String

作为例外,方法参数和循环变量的声明不需要def。

2、不需要的public

你可以把main方法前面的public去掉,实际上,groovy中默认的修饰符就是public,所以public修饰符你根本就不需要写,这点跟java不一样。

3一切皆对象

听起来象是“众生平等”的味道,事实上groovy对于对象是什么类型并不关心,一个变量的类型在运行中随时可以改变,一切根据需要而定。

如果你赋给它boolean ,那么不管它原来是什么类型,它接受boolean值之后就会自动把类型转变为boolean值。看下面的代码:

def var="hello "+

       "world"+

       ",groovy!"

       println var;

       println var.class;

       var=1001

       println var.class

输出结果:

hello world,groovy!

class java.lang.String

class java.lang.Integer

 

var这个变量在程序运行中,类型在改变。一开始给它赋值String,它的类型就是String,后面给它赋值Integer,它又转变为Integer。

循环

代码:

       def var="hello "+

       "world"+

       ",groovy!"

       def repeat(val){

            for(i = 0; i < 5; i++){

             println val

            }

       }

       repeat(var)

输出:

hello world,groovy!

hello world,groovy!

hello world,groovy!

hello world,groovy!

hello world,groovy!

注意循环变量i前面没有def。当然也没有java中常见的int,但如果你非要加上int也不会有错,

因为从Groovy1.1beta2之后开始(不包括1.1beta2),groovy开始支持java经典的for循环写法。

此外,上面的for语句还可以写成:

            for(i in 0..5)

这样的结果是一样的。 

范围

这个跟pascal中的“子界”是一样的。在前面的for循环介绍中我们已经使用过的for(i in 0..5)这样的用法,其中的0..5就是一个范围。

范围 是一系列的值。例如 “0..4” 表明包含 整数 0、1、2、3、4。Groovy 还支持排除范围,“0..<4” 表示 0、1、2、3。还可以创建字符范围:“a..e” 相当于 a、b、c、d、e。“a..<e” 包括小于 e 的所有值。

范围主要在for循环中使用。

       

集合

Groovy支持最常见的两个java集合:java.util.Collection和java.util.Map。前面所说的范围实际也是集合的一种(java.util.List)。

(1) Collection

Groovy 中这样来定义一个Collection:

def collect=["a","b","c"]

除了声明时往集合中添加元素外,还可以用以下方式向集合中添加元素:

collect.add(1);

       collect<<"come on";

       collect[collect.size()]=100.0

Collection使用类似数组下标的方式进行检索:

       println collect[collect.size()-1]

       println collect[5]

groovy支持负索引:

println collect[-1]      //索引其倒数第1个元素

       println collect[-2]      //索引其倒数第2个元素

Collection支持集合运算:

collect=collect+5        //在集合中添加元素5

       println collect[collect.size()-1]

       collect=collect-'a'         //在集合中减去元素a(1)

       println collect[0]          //现在第1个元素变成b

同样地,你可以往集合中添加另一个集合或删除一个集合:

       collect=collect-collect[0..4]   //把集合中的前5个元素去掉

       println collect[0]   //现在集合中仅有一个元素,即原来的最后一个元素

       println collect[-1]  //也可以用负索引,证明最后一个元素就是第一个元素

(2) Map

Map是“键-值”对的集合,在groovy中,键不一定是String,可以是任何对象(实际上Groovy中的Map就是java.util.Linke dHashMap)。

如此可以定义一个Map:

       def map=['name':'john','age':14,'sex':'boy']

添加项:

       map=map+['weight':25]       //添加john的体重

       map.put('length',1.27)      //添加john的身高

       map.father='Keller'         //添加john的父亲

可以用两种方式检索值:

       println map['father']       //通过key作为下标索引

       println map.length          //通过key作为成员名索引

字符串

Groovy中的字符串允许使用双引号和单引号。

当使用双引号时,可以在字符串内嵌入一些运算式,Groovy允许您使用 与 bash 类似的 ${expression} 语法进行替换。可以在字符串中包含任意的Groovy表达式。

 name="James" println "My name is ${name},'00${6+1}'" //prints My name is James,'007'

Groovy还支持"uXXXX" 引用(其中X是16进制数),用来表示特殊字符,例如 "u0040" 与"@"字符相同。

对字符串的操作

  1. contains 字符串中是否包含子字符串,'groovy'.contains('oo')将返回true;
  2. count 返回字符串中子字符串出现的次数,'groooovy'.count('oo')将返回3.
  3. tokenize 根据分隔符将字符串分解成子串,'apple^banana^grap'.tokenize('^')返回['apple','banana','grape']。
  4. 减操作 'groovy'-'oo',结果是'grvy'。
  5. 乘操作 'oo'*3,结果是'oooooo'。


0 0
原创粉丝点击