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

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

 

分享到:
评论
8 楼 Javabengou 2008-11-01  
看你把闭包当成什么
如果是对象,如果只看做方法
7 楼 RayChase 2008-10-27  
这也许算是Groovy闭包修整的一个体现,主流程方法来决定,但参数的传入和值的返回都可以通过一个闭包来修整。
6 楼 RayChase 2008-10-27  
这个理解还是蛮有意思的,至于扯上控制反转略感牵强。
5 楼 racnow 2008-10-22  
我靠,搞点难度的
4 楼 xiaobin268 2008-10-21  
我靠,学习了。
3 楼 rockjava 2008-10-17  
没看明白这和IOC 有什么关系吗?
2 楼 shiren1118 2008-10-17  
我怎么感觉像template pattern呢?(*^__^*) 嘻嘻……
1 楼 liliang_xf 2008-10-17  
狗哥的广告真吊,哈哈哈

相关推荐

    groovy和Java相互调用1

    标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...

    Java中使用Groovy的三种方式

    在Java开发中,Groovy是一种强大的、动态类型的脚本语言,它可以无缝地与Java代码集成,为开发者提供了更简洁、灵活的语法。本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。...

    [Groovy] Making Java Groovy 英文版

    Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you...

    Java调用Groovy,实时动态加载数据库groovy脚本

    1. 引入Groovy库:在Java项目中添加Groovy的相关依赖,通常是`groovy-all`,确保Java能够访问Groovy运行时环境。 2. 创建GroovyClassLoader:使用这个类加载器可以动态加载和执行Groovy脚本。它继承自Java的...

    hugo110-java_run_groovy-master_java_

    标题“hugo110-java_run_groovy-master_java_”表明这是一个关于使用Java运行Groovy脚本的项目,可能是某个GitHub仓库的克隆或归档。描述中提到,这个环境是为了方便用户(可能是开发者)实践Groovy语言,并为后续的...

    Groovy脚本:Java平台的动态编程利器

    Groovy是一种运行在Java平台上的动态脚本语言,它与Java紧密集成,提供了一种简洁、灵活的方式来编写Java代码。Groovy不仅支持静态类型检查,还可以在运行时动态地编译和执行代码,这使得它在Java平台中的应用场景...

    java 动态脚本语言 精通 Groovy

    Groovy是一种基于Java平台的动态脚本语言,它在Java开发者中越来越受欢迎,因为它提供了简洁、灵活的语法,以及强大的动态编程能力。Groovy与Java兼容性极佳,可以直接调用Java类库,使得它在Java生态系统中具有广泛...

    groovy调用java-se类库学习案例 Java学习资料

    此外,Groovy还提供了许多Java没有的特性,如闭包(Closure)、元编程(Metaprogramming)和DSL(领域特定语言)构造,这些都极大地扩展了Groovy的能力。在与Java SE类库交互时,你可能会发现这些特性使代码更具表达...

    Groovy+Java混合使用例子

    Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx

    Groovy脚本:Java平台自动化测试的灵活选择

    Groovy是一种基于JVM的动态编程语言,它不仅继承了Java的强大功能,还引入了动态类型、闭包、DSL等现代编程特性,使得编写自动化测试脚本变得更加简洁和高效。本文将详细介绍Groovy脚本在自动化测试中的应用,包括其...

    groovy programming(2006.12).pdf

    通过对比Java,Groovy提供了更为简洁的语法,例如闭包(closures)的使用,使得代码更加优雅和易于理解。 #### 2. 面向对象编程在Groovy中的应用 Groovy继承了Java的面向对象特性,但又在此基础上进行了扩展和改进。...

    Java Groovy

    - **闭包**:Groovy中的闭包类似于其他语言中的匿名函数,但具有更强的灵活性和表达能力。它们可以作为参数传递给方法,也可以作为返回值从方法中返回。 - **元编程**:Groovy提供了一系列强大的元编程工具,包括AST...

    Java整合Groovy脚本笔记

    Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合...

    groovy与java的区别1

    总结起来,Groovy与Java的主要区别在于其更灵活的语法、丰富的内置功能(如闭包和元编程)、以及对脚本编写的支持。这些特性使Groovy在快速原型开发、脚本编写以及需要高度动态性的场合中成为理想的选择,同时在处理...

    Z2-Groovy in Action.pdf

    Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它与Java语言无缝集成,同时提供了动态语言的许多特性,例如动态类型、闭包(closures)和元编程等。它由James Strachan于2003年首次提出,并迅速受到了社区的...

    精通 Groovy--下一代开发语言

    Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有...

    Groovy v2.4.13官方版

     Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 ...

    SpringBoot-Gradle-Maven-Java-Groovy

    SpringBoot、Gradle、Maven、Java和Groovy是Java生态系统中的重要组成部分,它们在现代软件开发中扮演着至关重要的角色。这篇详细的知识点解析将深入探讨这些技术及其相互关系。 1. **SpringBoot**: SpringBoot是...

    Groovy Recipes Greasing the Wheels of Java.pdf

    《Groovy食谱:润滑Java的轮子》一书,正如其标题所示,是一本旨在帮助Java开发者通过Groovy脚本语言提升工作效率、简化开发流程的实用指南。本书由Scott Davis编写,作为Pragmatic Bookshelf出版社的一员,他在书中...

Global site tag (gtag.js) - Google Analytics