`
jxd_zxf
  • 浏览: 231885 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

1、大块文本

    如果有一大块文本(例如 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)

 2、对字符串的操作

(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'。

 

四、Groovy主要结构

    Groovy主要结构包括逻辑分支、类、闭包等等。

1、逻辑分支

(1)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 == y

     Groovy也支持三元操作符。

y = 5 
x = (y > 1) ? "worked" : "failed" 
assert x == "worked"

 (2)switch语句

    Groovy的switch语句兼容Java代码,但是更灵活,Groovy的switch语句能够处理各种类型的switch值,可以做各种类型的匹配:

      a、case值为类名,匹配switch值为类实例

      b、case值为正则表达式,匹配switch值的字符串匹配该正则表达式

      c、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)方法来提供自定义的匹配类型。


五、循环

1、while循环:

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

 

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

 2、for循环:

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

 

// iterate over a range 
x = 0 
for ( i in 0..9 ) { 
  x += i 
} 
assert x == 45
 
// iterate over a list
x = 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 map
map = [‘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© 
} 
assert list == ["a", "b", "c"]

 

六、运行Groovy脚本

 

    编写Groovy脚本,不需要class,不需要Main入口点,也不需要声明变量;此外,可以用def语句来定义自己的函数,并在脚本中使用它。

 

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

 

    groovy HelloWorld.groovy

 

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

 

  1. 运行groovysh启动命令Shell,可以输入Groovy语句直接执行
  2. 运行groovyConsole启动Swing方式的Groovy控制台,这是一个简单的Groovy编辑器

 

    Groovy 脚本实际上是字节码级别的Java类。因此,还可以用groovyc编译Groovy脚本。可以通过命令行或者 Ant 使用groovyc以生成脚本的类文件。这些类可以用普通java命令运行,只要classpath包groovy.jar和asm.jar。(wang_wang)

分享到:
评论

相关推荐

    Groovy学习笔记 PDF版

    在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...

    Groovy 学习笔记

    **一、Groovy基础** 1. **语法简洁**: Groovy的语法比Java更为简洁,它支持面向对象编程,并且具有闭包和函数式编程的特点。 2. **动态类型**: Groovy是动态类型的,这意味着在编译时不需要声明变量的类型,类型会...

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    groovy学习笔记

    以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...

    Groovy学习笔记(适合入门者)

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 **1.1 概念** Groovy是一种灵活且功能强大的编程语言,它与Java平台紧密结合,具备诸如Python和Ruby等动态语言的特点。该语言的设计初衷是为Java开发者提供一...

    Groovy轻松入门——Grails实战基础篇

    ### Groovy轻松入门——Grails实战基础篇 #### 搭建Grails环境及创建Grails Demo程序 **Groovy**是一种面向对象的编程语言,它运行于Java平台上,能够与Java代码无缝集成。而**Grails**则是一款基于Groovy的高性能...

    Groovy学习笔记 Struts2集成--Groovy类作为Action

    通过阅读文章《Groovy学习笔记 Struts2集成--Groovy类作为Action》,你可以更深入地了解如何在实际项目中利用Groovy的特性来优化Struts2应用。提供的压缩包文件`struts2-groovy-plugin`可能包含了Struts2 Groovy插件...

    groovy基础语法.pdf

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

    groovy基础语法.doc

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

    Groovy need not rails——介绍自己写的一个基于groovy的框架,Webx

    2. **DSL支持**:Groovy的强大之处在于其领域特定语言(DSL)能力,Webx可能会提供一套内建的DSL,让开发者能以更简洁的方式定义路由、操作和视图。 3. **自动化工具**:基于Groovy的框架通常会包含一系列自动化...

    Groovy语法&Gradle配置学习笔记

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

    Java JDK 6学习笔记——ppt简体版.rar

    通过"Java JDK 6学习笔记——ppt简体版",学习者可以系统地学习到如何使用JDK 6进行开发,包括环境配置、基本语法、类库使用、异常处理、IO流、网络编程、多线程等各个方面。PPT格式通常直观易懂,便于快速理解和...

    Java JDK 6学习笔记——ppt简体版附课本代码

    这份“Java JDK 6学习笔记——ppt简体版”涵盖了Java语言的核心概念、语法特性以及JDK 6的新功能,旨在帮助初学者和有经验的开发者深入理解并掌握这一版本的Java开发环境。 首先,Java JDK 6的安装与配置是学习的...

    Groovy 学习资料

    开始学习Groovy时,可以从基础语法开始,了解变量、控制流、函数和类的用法。然后深入到闭包、元编程等高级主题,最后通过实践项目巩固所学知识。 8. **总结** Groovy作为Java平台上的动态语言,不仅简化了编码,...

    Groovy学习资料

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

    groovy 学习gradle学习经典手册

    1. **基础语法**:了解Groovy的基本结构,如变量声明、数据类型、流程控制语句(if-else、switch、for循环、while循环)以及函数定义和调用。 2. **动态特性**:掌握Groovy的动态类型系统,理解鸭子类型和运行时类型...

    Grails&Groovy学习资料

    1. Groovy基础:了解Groovy的基本语法、类和对象、集合操作、文件I/O、网络编程等。 2. Grails架构:理解MVC(模型-视图-控制器)设计模式,以及Grails中的Controller、Service、Domain Class等组件。 3. GORM和...

    Show Your ToolBox——锋利的groovy

    《Show Your ToolBox——锋利的Groovy》 在IT领域,工具的选择和使用往往直接影响到工作效率和项目质量。本文将深入探讨Groovy这门强大的动态编程语言,它以其灵活性和与Java的紧密集成,成为了许多开发者的得力...

Global site tag (gtag.js) - Google Analytics