`
wh870712
  • 浏览: 40620 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Groovy的基础语法

阅读更多
Groovy的基础语法


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)。

动态类型
像其他Script一样,Groovy 不需要显式声明类型。在 Groovy 中,一个对象的类型是在运行时动态发现的,这极大地减少了要编写的代码数量。在Groovy中,类型对于值(varibles)、属性(properties)、方法(method)和闭包(closure)参数、返回值都是可有可无的,只有在给定值的时候,才会决定它的类型,(当然声明了类型的除外)。例如:

//Groovy 动态类型 myStr = "Hello World"
由于使用了动态类型,不需要继承就可以得到多态的全部功能:


class Song{ @Property length @Property name }
class Book{ def public name def public author }

def doSomething(thing){ println "going to do something with a thing named = " + thing.name }

这里定义了两个Groovy 类,Song 和 Book。这两个类都包含一个 name 属性。函数 doSomething,它以一个 thing 为参数,并试图打印这个对象的 name 属性,但doSomething 函数没有定义其输入参数的类型,所以只要对象包含一个 name 属性,那么它就可以工作。可见, Song 和 Book 的实例都可以作为 doSomething 的输入参数。


mySong = new Song(length:90, name:"Burning Down the House")
myBook = new Book(name:"One Duck Stuck", author:"Phyllis Root")
doSomething(mySong) //prints Burning Down the House
doSomething(myBook) //prints One Duck Stuck
def doSth=this.&doSomething
doSth(mySong)
doSth(myBook)在例子的最后,我们还创建了doSomething的一个函数指针 doSth,最后的执行结果与调用doSoemthing是一样的。

值得注意的是:与Groovy Beta不同,在使用新的JSR Groovy类时,类里面的所有的变量都必须加上 def 关键字或者 private、protected 或 public 这样的修饰符。当然,也可以用 @Property 关键字声明成员变量。在Script中则不必。

字符串
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" 与"@"字符相同。

大块文本

如果有一大块文本(例如 HTML 和 XML)不想编码,你可以使用Here-docs. here-docs 是创建格式化字符串的一种便利机制。它需要类似 Python 的三重引号(""")开头,并以三重引号结尾。


name = "James"
text = """
hello
there ${name} how are you today?
"""
assert text != null
println(text)在Groovy-JSR中,不再支持下面这种多行字符串,个人觉得似乎与Here-docs功能重叠:


foo = "hello
           there
              how are things?"
println(foo)对字符串的操作

contains 字符串中是否包含子字符串,'groovy'.contains('oo')将返回true;
count 返回字符串中子字符串出现的次数,'groooovy'.count('oo')将返回3.
tokenize 根据分隔符将字符串分解成子串,'apple^banana^grap'.tokenize('^')返回['apple','banana','grape']。
减操作 'groovy'-'oo',结果是'grvy'。
乘操作 'oo'*3,结果是'oooooo'。
Groovy主要结构
接下来将展示Groovy的一些结构,包逻辑分支,类、闭包等等。
逻辑分支
if-else语句

Groovy提供Java相同的if-else语句。


x = false
y = false
if ( !x ) {
    x = true
}
assert x == true
if ( x ) {
    x = false
} else{
    y = true
}
assert x == yGroovy也支持三元操作符。


y = 5
x = (y > 1) ? "worked" : "failed"
assert x == "worked"switch语句
Groovy的switch语句兼容Java代码,但是更灵活,Groovy的switch语句能够处理各种类型的switch值,可以做各种类型的匹配:

case值为类名,匹配switch值为类实例
case值为正则表达式,匹配switch值的字符串匹配该正则表达式
case值为集合,匹配switch值包含在集合中,包括ranges
除了上面的,case值与switch值相等才匹配。


x = 1.23
result = ""
switch ( x ) {
    case "foo":
       result = "found foo"
        // lets fall through
    case "bar":
        result += "bar"
    case [4, 5, 6, 'inList']:
        result = "list"
        break
    case 12..30:
        result = "range"
        break
    case Integer:
        result = "integer"
        break
    case Number:
        result = "number"
        break
    default:
        result = "default"
}
assert result == "number"Switch语句的工作原理:switch语句在做case值匹配时,会调用isCase(switchValue)方法,Groovy提供了各种类型,如类,正则表达式、集合等等的重载。可以创建自定义的匹配类,增加isCase(switchValue)方法来提供自定义的匹配类型。

循环
while和do 循环

Groovy支持Java相同的while循环,但目前暂不支持do循环

x = 0
y = 5
while ( y-- > 0 ){   
x++
}
assert x == 5for循环

Groovy的for循环更简单,而且能够和各种类型的数组、集合、Map、范围等一起工作,我们稍候会详细介绍这些内容。


// iterate over a range
x = 0
for ( i in 0..9 ) {
    x += i
}
assert x == 45// iterate over a listx = 0
for ( i in [0, 1, 2, 3, 4] ) {
   x += i
}
assert x == 10// iterate over an array
array = (0..4).toArray()
x = 0
for ( i in array ) {
    x += i
}
assert x == 10// iterate over a mapmap = ['abc':1, 'def':2, 'xyz':3]
x = 0
for ( e in map ) {
    x += e.value
}
assert x == 6// iterate over values in a map
x = 0
for ( v in map.values() )
{
    x += v
}
assert x == 6// iterate over the characters in a string
text = "abc"
list = []
for (c in text) {
    list.add(c)
}
assert list == ["a", "b", "c"]运行Groovy脚本
你可以象使用Perl一样编写Groovy脚本,不需要class,不需要Main入口点,也不需要声明变量;此外,你还可以用def语句来定义自己的函数,并在脚本中使用它。

像许多脚本语言一样,Groovy 是 在运行时解释的,无编译的代码在构建-运行周期中可以提供很多好处。运行时编译使 Groovy 成为快速原型设计、构建不同的实用程序和测试框架的理想平台。通过以下代码可以很简单的运行Groovy.


groovy HelloWorld.groovy除了利用解释器来运行Groovy脚本外,Groovy 提供了两种不同的解释器Shell,使所有有效的 Groovy 表达式可以交互地执行:

运行groovysh启动命令Shell,可以输入Groovy语句直接执行
运行groovyConsole启动Swing方式的Groovy控制台,这是一个简单的Groovy编辑器
Groovy 脚本实际上是字节码级别的 Java 类。因此,还可以用 groovyc 编译 Groovy 脚本。可以通过命令行或者 Ant 使用 groovyc 以生成脚本的类文件。这些类可以用普通 java 命令运行,只要 classpath 包括 groovy.jar和asm.jar。(龙二少爷)

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    groovy基础语法.doc

    Groovy 基础语法 Groovy 是一种基于 Java 平台的高级编程语言,它融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同时保留了基于 Java 语言的核心语法。Groovy 提供了更简单的替代语言,且几乎不需要学习...

    groovy基础语法.pdf

    这些知识点是对Groovy基础语法的一个大致概述,而文件中的内容则展示了如何在实际代码中应用这些语法。由于文件内容有些混乱,并且含有重复的词汇和一些扫描错误,以上总结的知识点基于对Groovy语言的理解和部分可...

    Groovy 2 Cookbook (英文版)

    3. Groovy 2 Cookbook提供了大量实用的Groovy编程技巧,这表明书中内容可能包括Groovy基础语法、对象和元编程、集合操作、脚本执行、以及Groovy与Java的互操作性等方面的知识。 4. 书籍明确强调Groovy 2版本,这...

    Groovy User Guide

    - **适用人群:** 已经熟悉 Groovy 基础语法的开发者。 3. **Ant Task 故障排除 (Ant Task Troubleshooting)** - **内容:** 提供了处理 Groovy 与 Ant 集成时遇到的问题的方法。 - **适用场景:** 当使用 ...

    Groovy 2 Cookbook

    - Groovy 基础语法介绍,包括变量、数据类型、运算符等。 - Groovy 中的控制流语句详解,例如条件判断、循环等。 - 如何使用 Groovy 进行简单的文本处理和文件操作。 2. **进阶篇**: - 面向对象编程特性,包括...

    Groovy_快速入门.doc

    #### 一、Groovy基础语法介绍 Groovy是一种灵活的编程语言,运行在Java平台上,具有简洁且强大的特性。Groovy支持面向对象编程和函数式编程,并且能够与Java无缝集成。下面将详细介绍Groovy的基础语法。 #### 二、...

    groovy。。。。。。。。。。。。。。

    1. **Groovy基础语法**:Groovy的基础语法包括变量声明、数据类型(如动态类型和静态类型)、运算符、流程控制(如条件语句和循环)、函数定义以及异常处理。Groovy支持链式方法调用和闭包,使得代码更加简洁。 2. ...

    Groovy入门

    #### 二、Groovy 基础语法 - **默认导入的包**:Groovy 自动导入 `java.lang`, `java.util`, `java.io`, `java.net`, `java.math.BigDecimal`, `java.math.BigInteger`, `groovy.lang` 和 `groovy.util` 包中的类,...

    groovy基础教程源码,很全面

    Groovy基础教程源码涵盖了Groovy语言的各个方面,是学习和理解Groovy语言的宝贵资源。下面将详细阐述Groovy的一些核心知识点。 1. **动态类型与静态类型**: Groovy支持动态类型,这意味着变量在声明时无需指定...

    Groovy语法系列教程之布尔(五).pdf

    Groovy是基于Java平台的动态语言,它采用了很多Java的语法元素,但也进行了一定的改进和增强。本篇教程是关于Groovy编程语言中布尔(Boolean)类型的详细讲解,其中涉及到布尔类型的定义、使用以及Groovy对于布尔值...

    Groovy中文版教程

    这本书深入浅出地讲解了Groovy的各个方面,包括基础语法、面向对象特性、元编程、领域特定语言(DSL)构建以及与Java的协作等。 1. **基础语法**:Groovy的语法与Java有很高的相似性,但更加灵活。例如,变量声明...

    Groovy语法&Gradle配置学习笔记

    - **基础语法**:理解Groovy的基本数据类型、流程控制结构、方法定义等。 - **闭包和元编程**:深入学习Groovy的两大特色,掌握闭包的使用场景和元编程的应用。 - **Gradle入门**:学习如何创建Gradle项目,配置...

    Groovy学习资料

    首先,Groovy的基础语法是学习的重点。Groovy支持与Java相似的类、接口和继承结构,但其语法更为简洁。例如,Groovy允许省略分号和大括号,使代码看起来更整洁。此外,Groovy还有闭包(Closure)的概念,这是Groovy...

    实战groovy.rar

    1. 基础语法学习:从变量、数据类型、控制结构开始,逐步掌握Groovy的基础语法。 2. 类与对象:理解Groovy中的类、继承、接口以及元编程概念。 3. 集合与闭包:熟悉Groovy的List、Map等集合操作,以及强大的闭包特性...

    groovy初学者的福音

    1. **基础语法**:Groovy的语法与Java非常相似,但更加简洁。例如,它不需要分号来结束语句,变量声明更自由,可以省略类型。此外,Groovy支持闭包,这是它的一大特色,可以用于函数式编程。 2. **动态类型与静态...

    groovy正则表达式基础1

    【Groovy正则表达式基础1】 Groovy是一种基于Java平台的动态编程语言,它扩展了Java的功能,包括对正则表达式的处理。在Groovy中,正则表达式是通过`~`运算符或者使用斜杠(`/`)来定义的。这种特性使得Groovy在处理...

Global site tag (gtag.js) - Google Analytics