N久没写东西,今天突发想法,写下来,废话少说,干活,先看几段代码:
求和
def sum(n)
{
total = 0
for(int i = 2; i <= n; i += 2)
{
total += i
}
total
}
println
"Sum of even numbers from 1 to 10 is ${sum(10)}"
乘法
def product(n)
{
prod = 1
for(int i = 2; i <= n; i += 2)
{
prod *= i
}
prod
}
println
"Product of even numbers from 1 to 10 is ${product(10)}"
def sqr(n)
{
squared = []
for(int i = 2; i <= n; i += 2)
{
squared << i ** 2
}
squared
}
上面三段代码,只是简单的运算,如果我们按照普通的写法就是这样了,如果你只是会写代码,那么最好别学软件开发了,为什么,我们要尽量的使自己的工作简单,你会不会觉得3个运算要写3个方法了?
如果我们想想IOC:在一个方法定义的参数中定义接口类型(当然Groovy对这个更加动态),然后在实际的调用当中把具体的类型传递给这个方法。这是IOC的体现!
那么现在我们来看看闭包:
def pickEven(n, block)
{
for(int i = 2; i <= n; i += 2)
{
block(i)
}
}
pickEven(10, { println it } )
上面这段代码,如果按java的意思,也算的上一个IOC的实现,为什么,我们的block就是一个抽象类型,而最下面对pickEven(10, { println it } )方法的调用,把block用闭包{ println it }来代替了(groovy的闭包也是对象,一切都是对象),{ println it }就是实际的类型对吧,那么上面的3段代码都用闭包来实现会是什么样?
pickEven(10) { println it }
先说明下:
这段代码 { println it }在方法的外面,因为groovy中,如果闭包是最后一个参数,可以提取到方法外
求和
total = 0
pickEven(10) { total += it }
println
"Sum of even numbers from 1 to 10 is ${total}"
乘法
product = 1
pickEven(10) { product *= it }
println
"Product of even numbers from 1 to 10 is ${product}"
感觉如何?
groovy的闭包是不是比java的IOC原理更加让你WOW!!!!
闭包就是个代码块,而在groovy中闭包是对象,这样,我们可以先定义一个方法,方法其中的一个参数就是闭包(最好把闭包定义在最后一个参数位置,个人意见,因为这样我们可以简写),那么A方法在最后的参数位置定义了一个闭包,B方法在调用A的时候就可以把A方法需要做的事情,在A(){XXX}的XXX中写上!!!
东西就写到这里了,至于能不能理解看每个人的想法了,祝大家groovy中找到快乐!