`
找不着北
  • 浏览: 315958 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我们真的需要Java Closures(闭包)吗?

阅读更多

 现在所有的人都在谈论着closures,谈论着如何将它加入到Java spec里.每个人都有自己的观点...上至官方,下至草根.... 已经达成一致意见的声明发布了又被驳倒,这些致使closures成为这些年讨论的最多的Java话题.

 甚至有很多经验丰富的Java开发人员都在想closures是什么? Brian Goetz, of Sun Microsystems, 写了一篇很棒的文章: overview of closures and talks about the proposals in front of the JCP. 简言之,(下面是由 docman.cn 翻译家 提供的翻译)

一个闭包是一个包含若干自由变量的代码块;这些变量不用在代码块或者任何全局上下文中定义,而是在定义这个代码块的环境中定义 "closure"的名字来自于它们是代码块的组合,而这些代码块相对于变量引用语法来说不是闭合的,其中的变量是自由变量,这些代码在运算环境(作用域)中被执行,自由变量在环境中被绑定值.

目前来说,最类似的事就是JAVA对匿名类的支持了 增加闭包功能对于用类似JAVA这种强类型语言进行系统设计的改变意义重大,因为类型不仅指的是类和基本类型,还要表示代码

Smalltalk, Scheme, Ruby 以及其他语言都首选通闭包使函数成为很棒的对象. 函数能被储存在变量中,并且可以作为参数传递给其他函数,可以动态的创建以及从其他函数返回。 解决这个问题并非很容易,现在至少有两种提案 包括 Concise Instance Creation Expressions and BGGA Nominal Closures.

根据Neal Gafter(the Nominal Closures提议的合著人)的说法, 方案已经达成共识,--尽管在发表这篇文章时,还没有第三方肯定这种说法.

你认为如何? 这些提议会被认定吗? 意见真的达成一致了吗?还是BGGA人过分乐观了!

分享到:
评论
16 楼 realdah 2007-08-31  
不是有reflection了么。。。-__-!

要不java以后再搞点预编译宏,搞点全局函数和全局变量好了。。
和C++没啥区别了都。。。
15 楼 realzhang 2007-08-30  
hamlet 写道
倒是蛮像动态语言的,特别像perl

我用了很多年perl了,怎么看不出?你说说哪里像?
14 楼 hamlet 2007-08-30  
倒是蛮像动态语言的,特别像perl
13 楼 hpq852 2007-08-29  
Java1.4 + Groovy
12 楼 charon 2007-08-29  
xly_971223 写道
simohayha 写道
<  K,V,  throws   X  >
void   for  eachEntry(Map < K,V >  map, {K,V => void   throws  X} block)
         throws  X {
     for  (Map.Entry < K,V >  entry : map.entrySet()) {
        block.invoke(entry.getKey(), entry.getValue());
    }
}

看看java 7的代码,简直无语.

火星语言!


这个比较强。就是太罗嗦。但是比以前要干净明白多了。
11 楼 jonson 2007-08-28  
xly_971223 写道
simohayha 写道
<  K,V,  throws   X  >
void   for  eachEntry(Map < K,V >  map, {K,V => void   throws  X} block)
         throws  X {
     for  (Map.Entry < K,V >  entry : map.entrySet()) {
        block.invoke(entry.getKey(), entry.getValue());
    }
}

看看java 7的代码,简直无语.

火星语言!
one coin have two side ,it just a lanuage and the key is the programmer. a man use a lanuage but not a tool lanuage use a man!
10 楼 xly_971223 2007-05-15  
simohayha 写道
<  K,V,  throws   X  >
void   for  eachEntry(Map < K,V >  map, {K,V => void   throws  X} block)
         throws  X {
     for  (Map.Entry < K,V >  entry : map.entrySet()) {
        block.invoke(entry.getKey(), entry.getValue());
    }
}

看看java 7的代码,简直无语.

火星语言!
9 楼 Norther 2007-05-15  
确实有点繁琐了,从JAVA刚诞生时的相对于C++的简洁到现在,几乎从一个极端走向另一个极端,应该大改一下了,否则。。。期待JAVA8.。
8 楼 找不着北 2007-05-15  
Norther 写道
有几句是我翻译的 嘿嘿


好像大部分都是你翻译的!
7 楼 dovecat 2007-05-15  
hurricane1026 写道
simohayha 写道
看看python,ruby的代码,再看看java的代码,唉。

和最最丑陋的c++的一堆Template。。。。比起来都差不多了。。。。
btw:我还是觉得那个黑眼镜图片比较酷...
6 楼 simohayha 2007-05-15  
看看python,ruby的代码,再看看java的代码,唉。
5 楼 dovecat 2007-05-15  
说实话,其实在出java tiger的时候,我就觉得java有往丑陋方向演化的倾向...现在...个人觉得,果不其然.看来可以换个方向了.
4 楼 simohayha 2007-05-15  
<  K,V,  throws   X  >
void   for  eachEntry(Map < K,V >  map, {K,V => void   throws  X} block)
         throws  X {
     for  (Map.Entry < K,V >  entry : map.entrySet()) {
        block.invoke(entry.getKey(), entry.getValue());
    }
}

看看java 7的代码,简直无语.
3 楼 dovecat 2007-05-15  
希望JAVA不要往丑陋的方向变.
简洁点...
2 楼 Norther 2007-05-15  
有几句是我翻译的 嘿嘿
1 楼 dennis_zane 2007-05-15  
看了下讨论中的语法,相比于动态语言的简洁,实在是很丑陋!-_-

相关推荐

    Apress - Java Closures and Lambda.2015

    本书《Apress - Java Closures and Lambda》聚焦于Java 8中的新特性——闭包(Closures)和Lambda表达式。这些新功能不仅为Java语言带来了函数式编程的能力,还极大地提高了代码的可读性和维护性。本书通过深入浅出...

    Closures-for-Java:一个用于创建伪闭包的简单库,利用 Java 的匿名类,但提供标准化的接口,该接口也是类型化的

    在 "Closures-for-Java" 库中,这可能需要创建一个闭包对象来表示过滤条件,然后调用相应的操作: ```java List&lt;Integer&gt; numbers = Arrays.asList(1, 2, 3, 4, 5); List&lt;Integer&gt; evenNumbers = new FilterClosure...

    Java in easy steps Covers Java 9 6th Edition

    此外,这部分可能会解释Lambda表达式背后的闭包(closures)概念,以及Lambda如何捕获外围作用域中的变量。 在“Advanced Lambdas”章节,作者可能会讨论Lambda表达式的高级用法,包括方法引用(method references...

    [Groovy入门]第五讲.将流程控制语句与方法重构为闭包

    此外,Groovy的`Closures`类提供了一些有用的方法,如`call`、`use`和`with`,帮助我们更好地利用闭包。例如,`use`方法可以确保资源在使用后正确关闭,这对于处理I/O操作特别有用: ```groovy new File('example....

    java 动态脚本语言 精通 Groovy

    4. **闭包(Closures)**:Groovy中的闭包是其核心特性之一,类似于函数引用,可以作为参数传递,也可以作为返回值。闭包在处理集合操作时特别有用,如`each`和`collect`等。 5. **GDK (Groovy Development Kit)**...

    2017java源码-pycon2017-closures:PyconSK2017中的Python,Java,C#,JavaScript的幻灯

    2017年java源码Python中的闭包 这是在PyCon SK 2017上提供的Closures in Python对话Closures in Python支持材料。 谈话的目的是向观众介绍一般的封闭剂。 演示还包括来自其他语言(例如Java,C#或Javascript)的...

    java-lambdas-closures

    Java闭包和Lambda Java-8-Lambdas Java 9语言功能,第二版 而且因为我喜欢TDD,所以每一个练习都从使用JUnit4进行测试开始,在如此极端的水平上,有些练习比仅包含测试要多。 内容 Lambdas 目标键入功能接口方法...

    Functional Programming for Java Developers

    - Lambda表达式和闭包(Lambdas and Closures):Lambda表达式提供了一种简洁的表示匿名函数的方法。闭包是引用了自由变量的函数,即使创建闭包的上下文已经不再存在,闭包依然可以使用这些自由变量。 - 高阶函数...

    Grails-Java开发人员的圣杯.pptx

    例如,` closures`(闭包)是Groovy的一个强大特性,它可以作为可执行代码块,像方法一样传递和执行,还能访问和修改作用域内的变量值。 Grails框架的架构主要分为三层:视图层、业务逻辑层和持久层。视图层由GSP...

    JDK 7 and Beyond Modularity and Closure

    JDK 7作为Java发展的一个重要里程碑,引入了多个重要的新特性,包括Project Coin(语言特性的改进)、Modularity(模块化系统,即Jigsaw项目)以及Closures(闭包支持)。这些新特性不仅提高了开发效率,还为Java...

    大厂Golang开发工程师面试题集锦 后端 - Java.zip

    - **语法特性**:Go语言的设计简洁,其语法特性如goroutines(轻量级线程)、channels(通信机制)和closures(闭包)是其独特之处。 - **并发编程**:Go通过goroutines和channels实现了高效的并发模型,这是它在...

    亚信java笔试题-FE:前端资源收集

    亚信java笔试题 ##说说你对闭包的理解 ##Talk about your understanding of closures 使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用...

    java script

    6. **闭包(Closures)** - 闭包是JavaScript中一种强大的特性,允许函数访问和操作其外部作用域的变量,即使在其外部作用域已经结束时。 7. **异步编程(Async Programming)** - 通过回调函数、Promise、async/...

    mostly adequate guide

    4. **闭包(Closures)**:闭包是具有自由变量的函数,这些变量可以在函数定义的外部被访问。Java 8的Lambda表达式本质上就是闭包。 5. **函数组合(Composition)**:通过将小型、简单的函数组合起来,构建复杂的逻辑...

    groovy programming(2006.12).pdf

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

    Groovy(2007,2,21)

    - **Closures(闭包)**:闭包是Groovy中的一个重要概念,它是可以被赋值、传递和存储的代码块。闭包可以捕获其定义时的上下文,使得它可以访问和修改外部变量。在Groovy中,`each`方法通常与闭包一起使用来迭代集合...

    Z2-Groovy in Action.pdf

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

    Groovy入门教程(一).pdf

    此外,Groovy还提供了其他一些特性,如闭包(Closures)、列表和映射的简洁操作、以及对Java集合库的增强。闭包是Groovy中的一个重要概念,它类似于匿名函数,可以作为参数传递,增强了代码的可读性和可维护性。 ...

    一头扎进 JavaScript (高级篇) 视频教程 java1234出品

    1. **闭包(Closures)**:JavaScript中的闭包是函数和其相关的引用环境组合而成的实体,它可以访问并操作外部作用域的变量,即使在其外部作用域已经销毁的情况下。理解闭包对于优化内存管理和创建私有变量至关重要...

    groovy in action 中文版 2017.11

    闭包(closures)是Groovy中非常重要的一个概念,闭包是一种可以作为参数传递、可以从其被定义的作用域外调用的代码块。Groovy的闭包提供了非常强大的功能,比如高阶函数的能力,它们可以用来实现迭代、排序和其他...

Global site tag (gtag.js) - Google Analytics