groovy闭包 (PK) Java IOC

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中找到快乐!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值