Java不是新的COBOL
如果你Google一下"Java是新的COBOL",可以查到一大批宣扬这一论调的文章。我不知道这一观点从何而起,然而我倾向于认为大多是由Ruby社区所传播(和信奉)的。从开发者的角度讲,Ruby是一种灵活的语言。开发人员只需要坐下来打开文本编辑器就可以开始敲代码,不必考虑变量类型这样多余的东西。而Java则不得不认真考虑类型,毕竟 Java 是静态类型语言,这使得开发人员不得不担负这一重任。从这点就足以理解为什么Java开发者如此看重IDE了。
当初一大堆Java开发者转投Ruby时,Java确实有点停滞不前。语言本身没有多少发展,任何一个写过Swing应用的人都会告诉你:匿名内部类让你的代码膨胀了5倍。简而言之:典型的Java应用中包含了太多公式化的代码,这类代码与你试图实现的应用/业务逻辑毫不相干,简直是语言的阑尾。
因此我明白为什么有人倾向于把Java比喻为现代的COBOL了,两者之间有以下共同点:
1.冗余
2.停滞不前
3.只有古板的大企业们使用
好吧,我很荣幸地宣布以上这些已经成为历史。下面我们来逐一解决这些问题如何?
1. 冗余且停滞不前
这些问题的处方在于Java7和Java8一系列新特性的结合之中。Java7解决了许多冗余性问题,Java8则通过引入新范式(称为函数语言)使其前进了一大步。
Java8的确是Java的转折点,这也让我们看到,Oracle在维持向下兼容性并巩固其增长的同时,也是在认真发展这门语言的。Oracle无法简单把这门语言消灭掉之后在github上meme一下来为自己辩解。这样做显然成熟得多。
2. Java7对冗余性问题的解决
正如Java平台的首席架构师Mark Reinhold所说:Java7是进化性的,而Java8是革命性的。Java7从Coin项目中吸取了一些漂亮的特性,该项目旨在于找出在不过多增加复杂度的情况下,加入哪些语言特性可以提高开发者灵活性及语言可读性。以下是我非常期待的一些特性:
2.1 我真正想要的switch语句
没错,我的Java同胞们,我们终于有了一个可以用字符串的switch语句!
switch (lang) { case "Java" : out.println("I like frameworks!"); break; case "Ruby" : out.println("I like Pabst Blue Ribbon!"); break; case "PHP" : out.println("I like WordPress!"); break; }
谢天谢地我等得太久了。
2.2 类型推断:没错,我说的就是 Map<String, List<String>>这样的
我喜欢Scala的原因之一在于它的类型推断能力。这是Java的一个痛处,当你使用一个高度复合的参数化类型时,简直要腕管冒火、眼睛出血。
所以这个:
Map<String, List<String>> peopleByDept = new HashMap<String, List<String>>();
就成了这个:
Map<String, List<String>> peopleByDept = new HashMap<>();
他们将这个优化称为“菱形语法”,因为表达式右侧的类型被去除并用一个菱形<>代替。
我不打算逐一说明Java7中有助减少代码的良好小特性,Dustin的为实际事件所启发–JavaOne 2011讲稿一文已经出色地完成了这一任务,我的确没有什么可以补充的了。
3 Java8给语言带来的进步
Java8给我们带来了什么?两个主要的特性如下:
1.Lambda表达式/闭包语法
2.合理的模块系统(外号Jigsaw)
这里我只说明Lambda表达式,因为模块系统更大程度上是一个”幕后”特性。本文开篇处我提到了匿名内部类导致Java应用的体积膨胀,Lambda表达式正是为解决该问题铺设了道路。
例如…
Component button = new Button("Click me!"); button.onClick(new EventHandler() { public onEvent(Event e) { out.println("I was clicked!"); } }
用了Lambda表达式我们可以写成(看啊,连类型都不用管了):
button.onClick(e => out.println("I was clicked!"));
我就喜欢!
很酷的公司们也在用Java!
大企业使用Java?当然。然而Apple, Twitter, LinkedIn,SquareSpace也都在用。这些公司可都是死板大企业们的反面。通过使用JRuby, Jython, Scala和Clojure,这些公司和无数创业公司都支持了大量用Java编写的开源生态系统,因而也直接或间接地使用了Java。
老套话…
看了这么多相信你也会同意,Java并没有停滞,不管是看起来,还是用起来都有很大改进,同时也有很酷、毫不古板的公司在使用。那或许你也能认可,Java是新的COBOL这种说法并不正确,正如说Ruby是新的Java一样。
英文原文:Craig Tataryn,编译:ImportNew - 郑玮
译文链接: http://www.importnew.com/1043.html
【如需转载,请在正文中标注并保留原文链接、译文链接和译者等信息,谢谢合作!】
-- 扫描加关注,微信号: importnew --相关文章
- Java 8:Lambda表达式试水
- 深入理解JVM内幕:从基本结构到Java 7新特性
- Java 8 新特性
- 推荐给初级Java程序员的3本进阶书
- Java集合框架面试问题集锦
- 如何增强JAVA的I/O性能
- SQLite在Android中的使用
- 有效处理Java异常三原则
- Android手机中的“秘码”
- 通过Google Play验证Android应用的后台请求