阅读更多

9顶
0踩

编程语言

原创新闻 闭包能让JAVA语言变得简洁吗?

2008-04-02 09:16 by 见习编辑 Eastsun 评论(10) 有8853人浏览
    众所周知,JAVA语言一直因其语法上的简洁优雅(JAVA1.5中泛型的引入或多或少改变了这点)而被大部分人所喜爱.

    但另一方面,语法上的简洁也造成了使用上的一些不方便.譬如,你只想实现往控制台输出一个"Hello,world",你也得老老实实先写一个class,然后再写一个public static void main(String[] args)方法,最后才是System.out.println("Hello,world");
    而如果使用Python之类的语言,可能只需一行代码就搞定了.
    当然,上面这个例子看起来不是那么有说服力.

    不过如果你做过GUI开发的话,你就会感受到"Everything is an object"所带来的不便之处了.为了监听GUI事件并做出相应的反应,你会大量用到匿名类(而实际上你的目的只是要传入一个回调方法而已),这样不仅做了一些额外不必要的工作,也给代码的可读性造成一定影响.

    譬如这类的问题还有很多,Stevey写过一篇文章:名词的王国(Execution in the Kingdom of Nouns),用形象生动的语言描叙了为什么使用JAVA会让某些工作变得的啰嗦.他的观点是由于JAVA中的"everything is an object",在某些时候限制了我们用清晰而合理的表达方式来表述我们的思想.
在JAVA诞生以来,语法上最大的变动可能就是在JAVA 1.5中泛型的引入了.而且随着JAVA的开源,以后可能会有更多的元素被引入到JAVA语言里面来(官方的或非官方的).目前正在进行中的JDK7就有可能增加一些新的语言特性(见javapolis举行的关于JAVA7语言特性投票的结果),其中最重大的改变莫过于闭包的引入了.毫无疑问,这些语言特性的引入都是为了让我们这些Javaer活的更轻松一些.

    那么,闭包能改善目前JAVA语言所存在不足吗?就是说闭包能够让我们写出简单而易读的代码吗?要知道闭包并不是一个面向对象的东东.
Bruce Eckel在他的文章Will Closures Make Java Less Verbose里讨论了这个问题.并且在文章的末尾,他提出了一个很大胆的想法JAVA 3K(其实我也一直这么想的^_^):
引用

    我们知道Python有个Python 3000计划,这个Python 3000相对之前的Python有大幅度的修改,并且不兼容之前的Python语法,这样可以完全摆脱因考虑向后兼容性而带来的不必要的负担.那么我们为什么也搞个JAVA 3000呢?它与之前的JAVA有着类似的语法,并且也能运行在JVM上,但语法上与原有JAVA语言不兼容.在JAVA 3K里面我们可以有真正的泛型,闭包,并且可以丢弃掉int那些基本类型.对于那些想继续使用原有JAVA的人来说继续用就是了,而程序员想学习新的JAVA语言也很容易.


    你是如何看待这件事情的呢?


参考文章:
Execution in the Kingdom of Nouns
Seeking the Joy in Java
Will Closures Make Java Less Verbose
9
0
评论 共 10 条 请登录后发表评论
10 楼 kelly_zsl 2012-09-07 17:22
不改进就算了。。还说风凉话,没有什么语言是绝对的
9 楼 Godlikeme 2008-04-05 12:23
如果笔者了解下法律条文 应该知道语言描述准确的必要性,闭包是必要的。
程序语言的可执行性 vs 可理解性。多写几行不会造成执行上的问题,少写几行也不会更容易理解。
8 楼 sleets 2008-04-03 13:34
用D吧。。。。。。。。。。。。。。
7 楼 beckrabbit 2008-04-03 08:56
groovy不就是java3000吗?
6 楼 sunwei_07 2008-04-02 22:11
achun说的太偏激了,进步是肯定的,如果一个人自定义一门语言才几分钟?那这种语言有价值吗?
5 楼 leegorous 2008-04-02 21:44
闭包真的是个好东西
小弟愚见,Java那种“罗嗦”应该是想作者更加明确地表明其意图,因为Java不会作太多的假设,所以需要我们指名道姓去invoke哪个Object的哪个方法。
如果事先有更多共识,或者说是假设、那么我们才可以直接指出我们要做什么。
4 楼 ssuupv 2008-04-02 21:00
我马上开发E语言,大家等着
3 楼 Eastsun 2008-04-02 13:53
引用
计算机语言的历史才多少年?要相信会有更好的语言出现的.目前整个人类的计算机语言认识水平也就是刚刚起步罢了.
计算机语言过20年,c照样活的很好.c++,java这些就不一定了.永远的是汇编..
再过30年,一个人自己定义设计一门语言也许就是分分钟就搞定的事情了.
别说以后的事以后再说,现在我们可选择的就很多.
没有必要为了JAVA费这么大劲.根据应用选语言就行了.


汗..
按照achun 的逻辑,那我们什么也不用做了.
语言总是在进步,而现在JAVA作为最流行的语言,为什么就不能保持这个地位,也与时俱进呢?
为什么JAVA就不能成为将来最好的语言呢?

2 楼 achun 2008-04-02 13:47
没有必要为了JAVA费这么大劲.

计算机语言的历史才多少年?要相信会有更好的语言出现的.目前整个人类的计算机语言认识水平也就是刚刚起步罢了.
计算机语言过20年,c照样活的很好.c++,java这些就不一定了.永远的是汇编..
再过30年,一个人自己定义设计一门语言也许就是分分钟就搞定的事情了.
别说以后的事以后再说,现在我们可选择的就很多.
没有必要为了JAVA费这么大劲.根据应用选语言就行了.
1 楼 factor 2008-04-02 09:46

那直接用D得了

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 深入理解Java Lambda表达式,匿名函数,闭包

    注意,在这里笔者讨论的是Java编程语言中的匿名函数。 匿名函数让你想起了什么?匿名类,对吧?匿名类是没有名称的类。匿名函数是没有名称且不属于任何类的函数。 Java一直都是面向对象的编程语言。 这意味着Java...

  • 适用于Java开发人员的Groovy吗? 认识Gradle,Grails和Spock

    对于某些人来说,它基本上只是另一种深奥的JVM语言,但是由于一些流行的工具可以帮助您使用Java,因此它比您想象的要流行。 在下面的文章中,我们将检查Groovy和Java之间的联系是什么,并尽力抓住groovy双关语。 ...

  • gradle groovy_适用于Java开发人员的Groovy吗? 认识Gradle,Grails和Spock

    对于某些人来说,它基本上只是另一种深奥的JVM语言,但是由于一些流行的工具可以帮助您使用Java,因此它比您想象的要流行。 在下面的文章中,我们将检查Groovy和Java之间的连接是什么,并尽力抓住Groovy双关语。 ...

  • java8 闭包_Java8 新语法习惯 (使用闭包捕获状态)

    在 Java 编程中,我们以不严格的术语 lambda 表达式来表示 lambda 表达式和闭包。但是在某些情况下,理解它们的区别很重要。lambda 表达式是无状态的,而闭包是带有状态的。将 lambda 表达式替换为闭包,是一种管理...

  • 高薪程序员&面试题精讲系列25之你了解哪些Java新特性?你们公司使用哪个JDK版本?Java11了解过吗?

    在之前的几个章节中,壹哥 带各位复习的知识点与Java版本没有特别大的关系,今天我们就来复习一道与Java特定版本有关系的面试题: 你了解哪些Java(JDK)的新特性? Java8的新特性你知道哪些? Java11的新特性你...

  • kotlin会替代java_什么是Kotlin? Java替代说明

    kotlin会替代java Kotlin是一种通用,免费,开放源代码,静态类型的“实用”编程语言,最初是为JVM(Java虚拟机)和Android设计的,结合了面向对象和功能性编程功能。 它着重于互操作性,安全性,清晰度和工具支持。...

  • Java 8 习惯用语(10):使用闭包捕获状态

    在 Java™ 编程中,我们以不严格地使用术语 lambda 表达式来表示 lambda 表达式和闭包。但在某些情况下,理解它们的区别很重要。lambda 表达式是无状态的,而闭包是带有状态的。将 lambda 表达式替换为闭包,是一种...

  • scala和java_Scala还是Java? 探索神话和事实

    scala和java Scala编程语言的普及,在博客和社交网络上的大量评论和批评(例如GridGain的Nikita Ivanov和流行的Yammer案例 )引起了人们的广泛关注,这极大地增加了有关该语言的信息量。 但是,此类信息的质量通常有...

  • 浅谈Java8闭包

    闭包在现在的很多流行的语言中都存在,例如 C++、C# 。闭包允许我们创建函数指针,并把它们作为参数传递。在这篇文章中,我们将粗略的看一遍Java8的特性,并介绍Lambda表达式。   在2013年将发布的 JavaSE8 中将...

  • 这都Java15了,Java7特性还没整明白?

    以下是 Java 8 中的引入的部分新特性。关于 Java 8 新特性更详细的介绍可参考这里。 接口默认方法和静态方法 Lambda 表达式 函数式接口 方法引用 Stream Optional Date/Time API 重复注解 扩展注解的支持 ...

  • java 方法内部方法_Java内部内部特定于语言的方法

    java 方法内部方法 介绍 特定领域语言(DSL)通常被描述为针对特定类型问题的计算机语言,并且不计划解决其领域之外的问题。 DSL已经被正式研究了很多年。 然而,直到最近,内部DSL只是作为编程人员的偶然事件而被...

  • Kotlin的Lambda闭包语法

    Lambda 表达式是一种在现代编程语言中常见的特性,它可以用来创建匿名函数或代码块,使得将函数作为参数传递、简化代码以及实现函数式编程范式变得更加便捷。Lambda 表达式在函数式编程语言中得到广泛应用,也在诸如...

  • 为什么要使用 Rust 语言?Rust 语言的优势在哪里?

    Rust 是一种快速、高并发、安全且具有授权性的编程语言,最初由 Graydon Hoare 于2006 年创造和发布。现在它是一种开源语言,主要由 Mozilla 团队和许多开源社区成员共同维护和开发。 虽然 Rust 是一种通用的多...

  • Groovy 本质初探及闭包特性原理总结

    Groovy 是基于 JVM 的一种语言,也是 Java 的一种升级拓展语言。其具备脚本语言的特性,但又不算脚本,所以其运行有如下两种方式: 基于源码直接运行,譬如 groovy Test.groovy。 基于预编译模式运行,譬如先 ...

  • java中的lambda表达式(从小白也能看懂做起)

    到目前为止,在 Java 中传递一个代码段并不容易, 不能直接传递代码段,Java 是一种面 向对象语言,所以必须构造一个对象,这个对象的类需要有一个方法能包含所需的代码。Java中有很多封装代码的接口,如Comparator...

  • Java函数式编程(七)闭包

    恰恰相反,就算代码变得再复杂,我们也不会为了代码的简洁性而在代码质量上做任何妥协,下面我们就会看到。 在前面一个例子中我们已经可以重用lambda表达式了;然而,如果再匹配另外一个字母,代码冗余的问题很快...

  • COMSOL多物理模拟下二氧化碳驱替甲烷:热流固耦合中煤层变形及物性变化对产气量及封存能力的影响

    内容概要:本文详细介绍了使用COMSOL多物理场仿真软件,在热流固耦合框架下,研究二氧化碳驱替甲烷过程中的煤层变形、孔渗变化及其对甲烷产量和二氧化碳封存量的影响。首先,文章解释了二氧化碳驱替甲烷作为一种关键技术的意义,然后逐步展示了模型的构建方法,包括设定煤层作为多孔介质、考虑其复杂物理特性(如渗透率、孔隙度)以及模拟二氧化碳注入和甲烷释放过程。接着,通过对模拟结果的分析,揭示了煤层在二氧化碳注入后的明显变形、孔渗特性的显著变化,最终得出甲烷产量与煤层孔渗特性紧密相关,而二氧化碳封存量受煤层变形和孔渗变化影响的结论。最后,强调了该模型对未来理解和优化驱替过程的重要性。 适合人群:从事能源领域研究的专业人士,尤其是关注二氧化碳驱替甲烷技术的研究人员和技术人员。 使用场景及目标:适用于需要深入了解二氧化碳驱替甲烷过程中煤层变形和孔渗变化机理的研究项目,旨在提高甲烷产量和二氧化碳封存量的理解和优化。 其他说明:文中提供了详细的建模步骤和代码分析,有助于读者掌握COMSOL多物理场仿真的具体操作方法。

  • 少儿编程scratch项目源代码文件案例素材-我的世界 守卫者.zip

    少儿编程scratch项目源代码文件案例素材-我的世界 守卫者.zip

Global site tag (gtag.js) - Google Analytics