Groovy Tutorial 笔记
官网上的例子会更多,更详细一些
1:object?.method调用的时候,如果对象是空,不会抛出异常,只会返回一个null
在.Groovy中间中使用单独的一个中文"" String的时候,有可能会提示错误,加个空格就好,比较奇怪
字符串String中加入$xx符号后, 就可以成为GString,可以方便的使用运行符进行操作,包括==
其中的$操作的默认数据并不会一直绑定,只会在声明的时候,进行String的生成,后面都不会进行修改,如果需要进行数据绑定
可以使用Closure
def fullname = "$firstname $surname" //不带绑定
fullname = "${-> firstname} $surname" //带Bindable
字符串方法的调用,并不会修改掉源对象
加入过滤的查询,返回一个List
words.findAll{w -> w == w.reverse() && w.size() > 5}
数字比较特殊的一个运算符
assert 4 <=> 3 == 1 调用的等同于 4.compareTo(3) 结果应该是介于-1,0,1之间
日期的操作
静态导入以及重命名
import static java.util.Calendar.getInstance as now
使用时候now().time
import static Integer.*
可以直接使用其中的静态方法
日期方便的操作
new Date() + 1.hour + 3.weeks - 2.days
new Date() + 1 //默认是加上一天
格式化日期
input = "1998-06-03"
df1 = new SimpleDateFormat("yyyy-MM-dd")
date = df1.parse(input)
集合和区间(Range)的使用
assert [1,2,3,4] == (1..4)
Map的key可以直接声明为一个对象,不过最终也被转换成字符串的形式
def map = [a:1, 'b':2]
List.groupBy { it.属性 } 可以方便的按照指定的属性进行分组排序,注意返回的结果会比较特殊
assert "1.23".replaceAll(/./){ ch ->
ch.next()
} == '2/34' 会使用.符号的下一位编码进行转换 (){}的配合 就是replaceAll中传入了2个参数,方便的操作匹配的结果
控制语句
只要对象不是null或者size!=0,或者现实的false,那么都是true
List*.属性 会返回集合内所有的该属性组成的集合
闭包
doubleNum = { num -> num * 2 } 区别与方法是=的存在
调用时候可以直接doubleNum(3),就和普通的方法定义一样, 不过这里的返回结果是最后一行的表达式,也可以使用(){}传递多个参数
使用闭包封装参数
map = ['a': 1, 'b': 2]
doubler = {key, value -> map[key] = value * 2}
map.each(doubler)
这里用一个闭包,接收了each所传递的两个参数
另外一种接受的形式
def doubleMethod(entry) {
map[entry.key] = entry.value * 2
}
doubler = this.&doubleMethod
map.each(doubler)
使用this.&Closure名进行复制 ----该方法似乎无效了
[1, 2, 3].grep{ it < 3 } == [1, 2] //进行过滤
any和every进行判断
collect对每一个对象进行操作,并且累计结果
(1..9).collect{it}.join() == '123456789'
实现比较大小
def min = { x, y -> [x, y].min() }
XML操作
从一个List创建一个XML
// create XML as input
def input = new XStream().toXML(athleteList)
解析一个XML
def records = new XmlSlurper().parseText(XML)
简单的SQL连接
def foo = 'cheese'
def sql = Sql.newInstance("jdbc:mysql://localhost:3306/mydb", "user","pswd", "com.mysql.jdbc.Driver")
sql.eachRow("select * from FOOD where type=${foo}") {
println "Gromit likes ${it.name}"
}
使用DataSets
连接同上
def food = sql.dataSet('FOOD')
def cheese = food.findAll { it.type == 'cheese' }
cheese.each { println "Eat ${it.name}" }
com.thoughtworks.xstream这个包好像还不错
进行Groovybean到xml的转换
生成的东西视乎是序列化时用到的格式
Groovy进行测试
与Junit3.3结合就是继承 extends GroovyTestCase
然后使用testMethod(方法名) 来进行测试
如果结合Junit4.4,可以使用Annotation的方式进行
可以使用静态导入assert部分,方便使用
import static org.junit.Assert.assertEquals
@Test(expected=ArithmeticException)
void divideByZero() {
println 1/0
}
这个用于测试异常情况
至于JUnitCore.main(ArithmeticTest.name) 暂时不懂什么意思
@Before 注解用于定义初始化的方法,@After 则是在测试结束时候
Junit4.4下的测试还包括了
@RunWith(Theories)
@RunWith(Parameterized) 需要了解
调用远程服务的方法
import groovy.net.soap.SoapClient
proxy = new SoapClient("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL")
rate = proxy.ConversionRate("USD", "EUR")
println rate....
与Spring整合
可以方便的使用@Component 以及@AutoWired进行注入
详细例子看官网上的更多...
官网上的例子会更多,更详细一些
1:object?.method调用的时候,如果对象是空,不会抛出异常,只会返回一个null
在.Groovy中间中使用单独的一个中文"" String的时候,有可能会提示错误,加个空格就好,比较奇怪
字符串String中加入$xx符号后, 就可以成为GString,可以方便的使用运行符进行操作,包括==
其中的$操作的默认数据并不会一直绑定,只会在声明的时候,进行String的生成,后面都不会进行修改,如果需要进行数据绑定
可以使用Closure
def fullname = "$firstname $surname" //不带绑定
fullname = "${-> firstname} $surname" //带Bindable
字符串方法的调用,并不会修改掉源对象
加入过滤的查询,返回一个List
words.findAll{w -> w == w.reverse() && w.size() > 5}
数字比较特殊的一个运算符
assert 4 <=> 3 == 1 调用的等同于 4.compareTo(3) 结果应该是介于-1,0,1之间
日期的操作
静态导入以及重命名
import static java.util.Calendar.getInstance as now
使用时候now().time
import static Integer.*
可以直接使用其中的静态方法
日期方便的操作
new Date() + 1.hour + 3.weeks - 2.days
new Date() + 1 //默认是加上一天
格式化日期
input = "1998-06-03"
df1 = new SimpleDateFormat("yyyy-MM-dd")
date = df1.parse(input)
集合和区间(Range)的使用
assert [1,2,3,4] == (1..4)
Map的key可以直接声明为一个对象,不过最终也被转换成字符串的形式
def map = [a:1, 'b':2]
List.groupBy { it.属性 } 可以方便的按照指定的属性进行分组排序,注意返回的结果会比较特殊
assert "1.23".replaceAll(/./){ ch ->
ch.next()
} == '2/34' 会使用.符号的下一位编码进行转换 (){}的配合 就是replaceAll中传入了2个参数,方便的操作匹配的结果
控制语句
只要对象不是null或者size!=0,或者现实的false,那么都是true
List*.属性 会返回集合内所有的该属性组成的集合
闭包
doubleNum = { num -> num * 2 } 区别与方法是=的存在
调用时候可以直接doubleNum(3),就和普通的方法定义一样, 不过这里的返回结果是最后一行的表达式,也可以使用(){}传递多个参数
使用闭包封装参数
map = ['a': 1, 'b': 2]
doubler = {key, value -> map[key] = value * 2}
map.each(doubler)
这里用一个闭包,接收了each所传递的两个参数
另外一种接受的形式
def doubleMethod(entry) {
map[entry.key] = entry.value * 2
}
doubler = this.&doubleMethod
map.each(doubler)
使用this.&Closure名进行复制 ----该方法似乎无效了
[1, 2, 3].grep{ it < 3 } == [1, 2] //进行过滤
any和every进行判断
collect对每一个对象进行操作,并且累计结果
(1..9).collect{it}.join() == '123456789'
实现比较大小
def min = { x, y -> [x, y].min() }
XML操作
从一个List创建一个XML
// create XML as input
def input = new XStream().toXML(athleteList)
解析一个XML
def records = new XmlSlurper().parseText(XML)
简单的SQL连接
def foo = 'cheese'
def sql = Sql.newInstance("jdbc:mysql://localhost:3306/mydb", "user","pswd", "com.mysql.jdbc.Driver")
sql.eachRow("select * from FOOD where type=${foo}") {
println "Gromit likes ${it.name}"
}
使用DataSets
连接同上
def food = sql.dataSet('FOOD')
def cheese = food.findAll { it.type == 'cheese' }
cheese.each { println "Eat ${it.name}" }
com.thoughtworks.xstream这个包好像还不错
进行Groovybean到xml的转换
生成的东西视乎是序列化时用到的格式
Groovy进行测试
与Junit3.3结合就是继承 extends GroovyTestCase
然后使用testMethod(方法名) 来进行测试
如果结合Junit4.4,可以使用Annotation的方式进行
可以使用静态导入assert部分,方便使用
import static org.junit.Assert.assertEquals
@Test(expected=ArithmeticException)
void divideByZero() {
println 1/0
}
这个用于测试异常情况
至于JUnitCore.main(ArithmeticTest.name) 暂时不懂什么意思
@Before 注解用于定义初始化的方法,@After 则是在测试结束时候
Junit4.4下的测试还包括了
@RunWith(Theories)
@RunWith(Parameterized) 需要了解
调用远程服务的方法
import groovy.net.soap.SoapClient
proxy = new SoapClient("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL")
rate = proxy.ConversionRate("USD", "EUR")
println rate....
与Spring整合
可以方便的使用@Component 以及@AutoWired进行注入
详细例子看官网上的更多...