Will Closures Make Java Less Verbose?
March 29, 2008
要是没看过的话,这里是他这篇文章的链接。他的观点是,Java已经太过于追求“到处都是对象(everything is an object)”了,使其在思想表达上不够简洁、清晰。他将Ben Franklin诗中的“因小失大(For want of a nail)”巧妙地用到了Java上面,更好地传达了他的意思。
而我的问题是,如果闭包可以让你多用一点动词、少用一点名词(按照Yegge的思路),那么程序员会因此创建更易于阅读的程序吗?或者说,十多年根深蒂固的文化会让任何解决该问题的尝试付之东流吗?即,无论有了多少额外的语言特性,Java程序还会继续保持它的原样吗?
如果在这个问题上没有弄清楚的话,之后再怎样修补也无法挽回Gosling等人早期做出的决定(即认为使Java“打入市场”要比试图增加泛型和闭包使之更像一种语言要重要得多)。
这是任何软件系统架构的决定性因素,也是影响系统中所有东西的核心决策。这些更是你所作出的必须正确的决定,而其他问题可以晚些时候通过战略构思来解决。这些决策必须由拥有丰富经验的架构师来完成,他们知道在做什么,也会有很多疑问,但这恰恰是他们的职责所在。
Java 3K
在2008年Java非正式研讨会(Java Posse Roundup '08)的最后一次技术会议上,我们再一次讨论了Java的未来。我们基本上得出这样一个结论,向后兼容性起初是为服务一些公司而保留下来的,但不管怎样这些公司是不会升级到Java最新版本的。
最成功的语言都从已有语言轻松转变过来了,因此程序员的知识仍然不会贬值。C++之所以如此成功就是因为它让C程序员能够轻易地过渡过来。Java同样如此成功也是因为它能从C++过渡过来。
到底应不应该发布一个“Java 3K”呢(学一下Python 3000,Guido Van Rossum为Python可向后兼容的修复版本起了这个名字,今年晚些时候会发布)?一个仍在JVM上运行且语法和老版Java相似的新版Java没有受任何向后兼容性问题的羁绊,因此它实现了真正的泛型、闭包且去除了基元(primitives)等等。如果一个公司不想投入到Java 3K的怀抱—这样的公司也往往没有升级到Java 5—那么它便继续用已有的那些东西。但那些饱受老版Java的旧问题和糟糕的旧决策困扰的程序员们便可以轻松地转移到Java 3K上面了,他们只需一条短小的学习曲线,且对生产力没有丝毫影响。
你怎么看呢?
(原文链接网址:http://www.artima.com/weblogs/viewpost.jsp?thread=227728)
分享到:
相关推荐
写关于java8系列文章的目的在于梳理和分享java8新增的主要特性,开发时也可以用作参考 lambda表达式是java8新增的主要特性之一,lambda表达式又称闭包或匿名函数,主要优点在于简化代码、增强代码可读性、并行操作...
学生提问:为什么即使我没有给多行文本域编写右键菜单,但当我在多行文本域上单击右键时一样会弹出右键菜单? 418 11.7 在AWT中绘图 418 11.7.1 画图的实现原理 418 11.7.2 使用Graphics类 419 11.8 处理位图 ...
“简化的能力意味着消除不必要的,以便必要的可以说话。” - Hans Hofmann,Bootstrap 简介,1993 Javolution - Java 革命? Javolution 的实时目标很简单:使您的应用程序更快,时间更可预测! 高性能- 具有 ...
了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合、内置正则表达式和闭包。编写第一个 Groovy 类,然后学习如何使用 JUnit 轻松地进行测试。借助功能完善的 Groovy 开发环境和使用技能,...
了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合、内置正则表达式和闭包。编写第一个 Groovy 类,然后学习如何使用 JUnit 轻松地进行测试。借助功能完善的 Groovy 开发环境和使用技能,...
支持函数编程、闭包等语法,代码更易于阅读和维护 对OO(面向对象编程)和Ant DSL 支持更好,在语法层面支持编写、编译shell脚本 减少结构性代码。开发web/GUI/Console程序,效率更高 简化单元testing ...
本教程适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java™ 开发人员。了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合、内置正则表达式和闭包。
它旨在简化Closure开发并使其更令人愉悦。 Plovr需要Java 7或更高版本。 下载Plovr 您可以找到要下载的Plovr JAR。 从源头构建Plovr Plovr构建需要Java Development Kit(JDK)7或更高版本, 和zip 。 遵循,请...
通过导入关系的传递闭包从主套件可到达的套件集合形成了mx操作的集合。 运行 mx mx可以直接运行(即python mx/mx.py ... ),但更常见的是通过mx/mx bash 脚本调用。 将mx/目录添加到您的 PATH 可以简化执行mx 。 应...
此处提供的代码是一个简化示例,显示了通过使用集合闭包的简单循环和过滤发现的问题之一。 如果您有关于如何提高Groovy性能的建议,请向我发送拉取请求,我很乐意将其放在分支上进行并排比较。 我们的团队正在考虑...
4.1 简化的orm和grails对象关系映射(gorm) 4.2 gorm基础 4.3 设置属性可选 4.4 gorm中的关系 4.5 执行crud操作 4.5.1 创建书签 4.5.2 读取书签 4.5.3 更新书签 4.5.4 ...
放弃Forgo是一个4KB的库,它使使用JSX(如React)创建现代Web应用程序变得非常容易。 与React不同,很少有框架特定的模式和术语...使用degit可以简化此过程: 对于JavaScript: npx degit forgojs/forgo-template-java
它还将提供一个平台,用于试验如何最好地支持语言功能,例如异步编程,类扩展,闭包,异常和效果类型。 基本的面向对象子集计划包括一组最少的功能以支持编程。 以下列表应作为一般准则。 一些非常基本的语言功能...
提炼于本人手写的纯 JavaScript 工具程序,用于遍历当前网页的所有子页面 并执行迭代回调,且回调函数返回值可用于结果回传,有助于减少闭包变量~ 其特点在于 —— 递归遍历时只检索子页面的 Window 对象,不立即...
遇到复杂功能,应该想着把它简化、组件化,把小功能封装成小组件,小功能块可以任意的组合得到千变万化的复杂功能。function就可以帮助我们把功能进行封装。那什么是封装呢。要我说,只要把具体实现给打包,对外提供...