最近想要groovy来编写自动化测试脚本,想到使用groovy,不外乎几个原因。
第一,同样是基于JVM虚拟机,这对于一个工作了2年多的javaer驾轻就熟;
第二,代码简洁;
第三,可以使用EclipseIDE工具装上groovy plugin;
第四,图个新鲜感;
第五,可以使用java的api;
第六,了解groovy编写桌面客户端,非常之容易
在看了groovy的官网的操作指南,基本语法跟动态语言差不多,唯独它提出了闭包这个概念,非常吸引我。
所以本章就从闭包开始谈起。
Groovy 中的闭包是一个匿名的代码块,可以接受参数,并返回一个返回值,也可以引用和使用在它周围的,可见域中定义的变量。在许多方面,它看起来像 java 中的匿名内部类,并且闭包的用法也确实像大多数 java 开发者使用匿名内部类的方式。
上面的是官方的介绍,但是从本人感觉闭包比其java的匿名类用的更人有创新,可以通俗的理解就是代码块,也是是一个方法或许类,到最后都是closure的子类。
标准的格式是:
//这里的 [closureArguments->] 是一个可选的,逗号分隔的参数列表。statements 由 0个或多个 Groovy 语句构成。参数列表看起来有点像方法的参数列表,它们可能带类型声明,可能不带。如果指定了一个参数列表,则 符号 -> 必须出现,以分离参数列表和闭包体。statements 部分可以由 0 个,1个,或很多的 Groovy语句构成。
难以理解的部分是->,其实我们可以理解->左边部分就是参数列表,右边部分又是另外的闭包体(受外围闭包限制)
{ [closureArguments->] statements } package com.groovyapp.auto
{ item++ }
{ println it }
{ ++it }
{ name -> println name }
{ String x, int y -> println "hey ${x} the value is ${y}" }
{ reader ->
while (true) {
def line = reader.readLine()
}
}
class HiddenMember {
private String name="cyyyyyy";
def getClosure (String name) {
return { println (name)}
}
//为了判断参数中到底来源形参,还是自身成员变量值,通过ower关键字有点像this
def getClosure2(String name){
return { name3 -> println ("Argument: ${name}, Object: ${owner.name}")}
}
}
//闭包的产生条件,从堆栈中,实例化后放入堆中,jvm衍生物
HiddenMember menmber=new HiddenMember();
//创建了两个闭包,当闭包的周围代码触及到它们时,闭包才被隐性的创建,而不能像new关键字
def closureVar = menmber.getClosure("Xavier");
def closureVar2 = menmber.getClosure2("Xavier");
//以下两种方式都可以,第一种默认调用call()方法
closureVar();
closureVar2.call();
//调味闭包
def c = { arg1, arg2-> println "${arg1} ${arg2}" }
//固定参数
def d = c.curry("foo")
d("bar")
闭包可以接收 1....N 个参数,这些参数可以静态的声明其类型,也可以不声明类型。第一个参数是一个未声明类型的隐含变量叫 “it” ,
如果没有其他显式的参数声明的话。如果调用者没有声明任何参数,则第一个参数(并且扩展为 it)将为 null。
我觉得取这个参数的名称“it”有点匪夷所思,不过其用处还是相当明显的package com.groovyapp.auto
import groovy.lang.Closure;
class SomeCollection {
public void each (Closure c){
}
}
SomeCollection stuff = new SomeCollection();
stuff.each() { println it }
def names=[
"four",
"two",
"tommy",
"jacky"
]
//println names;
//通过names,第一个参数的名称就默认是it
names.each {println it}
//闭包同样可以作为map的key或者value,都是允许的
f = { println "f called" }
m = [ (f): 123 ]
println m.get(f);
|
分享到:
相关推荐
Groovy是一种动态、灵活的编程语言,它是...总之,Groovy为Java开发者提供了一个更加灵活和高效的工具,无论你是想简化日常的脚本任务,还是希望构建复杂的Web应用程序,学习Groovy都能让你的编程生涯增添新的色彩。
本学习资料将提供一系列教程和实践案例,帮助你从零开始学习Groovy。你可以通过阅读文档,完成练习,以及参与社区讨论来提升你的Groovy技能。 6. **Groovy在实际项目中的应用** - **Grails框架**:Groovy的一个...
《Groovy学习与Gradle实践经典手册》是一本深度探讨Groovy编程语言和Gradle构建工具的指南,专为Android及Java开发人员提供全面的知识覆盖。本书旨在帮助开发者提升在项目管理和自动化构建方面的技能,使其能够高效...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个重要的补充。Groovy结合了Python、Ruby和Smalltalk等语言的特性,同时保留了与Java的无缝集成能力,使得它在编写脚本、构建工具、Web应用以及企业级应用程序...
Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,提供了丰富的功能,而Groovy则是一种面向Java平台的动态编程语言,它的设计目标是提高开发者的生产力。 Groovy语言: Groovy是Java平台上的一个...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个强类型、静态类型的脚本语言。Groovy结合了Java的面向对象特性和Python、Ruby的简洁语法,使得它成为Java开发者进行快速开发、自动化任务以及编写简洁代码的...
Groovy学习资料-中文.rar。Groovy学习资料。Grails学习资料。mht网页格式。
例如,`com.example`可能是一个自定义的Java或Groovy库,学习者可以通过查看和分析这个包中的类来了解如何在Groovy中使用自定义的Java组件。 总的来说,学习Groovy包括熟悉其语法、掌握与Java的交互方式、理解其...
Groovy in Action是一本权威的Groovy教程,由Dierk Koenig和Andrey Breslav等专家撰写,它深入浅出地介绍了Groovy的各个方面,是学习Groovy的必备参考书。 这本书分为多个部分,首先介绍Groovy的基础知识,包括语法...
### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...
Groovy是一种基于Java平台的动态编程语言,设计用于提高开发者的生产力和代码的简洁性。在Java生态系统中,Groovy以其灵活性和与Java的良好互操作性而受到广泛关注。本篇文章将深入探讨Groovy的最新学习动态,特别是...
适合想了解groovy 编程开发的人员 Groovy - hellworld Groovy - 变量 Groovy - 静态import Groovy - 字符串 Groovy - 分支结构语句 Groovy - 循环结构语句
Groovy是一种动态、类型安全的编程语言,专为Java虚拟机(JVM)设计,它在Java生态系统中扮演着重要角色。Groovy结合了面向对象编程(OOP)、函数式编程(FP)以及脚本语言的简洁性,使得开发者能够更高效地编写代码...
Groovy学习大礼包是一个全面的资源集合,旨在帮助初学者和有经验的开发者深入理解和掌握Groovy语言。这个礼包包含了三个关键的学习资料: 1. **Groovy轻松入门.doc** - 这份文档很可能是为新手设计的,提供了一个...
为了进一步学习,你可以通过阅读"第一讲 项目演示与搭建Groovy开发环境"的文档,或者查看"µÚÒ»½² ÏîÄ¿ÑÝʾÓë´î½¨Groovy¿ª·¢»·¾³"的资料。这些资源将详细解释如何从零开始构建一个Groovy...
Groovy是一种基于Java平台的动态脚本语言,它以其简洁的语法、强大的功能以及与Java的无缝集成而受到开发者喜爱。以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是...
Groovy是一种基于Java平台的、动态的、强大的编程语言,它设计的目标是增强开发者的生产力。Groovy结合了Java的静态类型系统和Python、Ruby等动态语言的灵活性,使得开发者可以更加高效地编写代码。本篇文章将深入...