先说说自己的经历吧,想对来说我是同时接触这两门语言的,记得当时Java崛起的时候才刚刚听说C#,自己拿着一本《Java编程思想》经常拜读一下,看着Bruce 吹的一切皆为对象,自动垃圾回收等等NB的特性不由得惊叹,相对于我们当时学校里面教的C语言确实先进啊。
后来渐渐参与各种项目,工作,等等原因,在最初的7年中主要的开发语言是c++/c#,在这篇文章中我不想谈及c++,因为我在以往的博文中已经有很多这方面的随笔。虽然当时c#是我的主要开发语言,但是对于Java的每次重大升级我还是比较关注的,客观来讲,我觉得近10年来作为语言的角度上比较,c#确实比Java先进了太多,无论从调试器支持,IDE,语法,新特性,开发效率,Java都要略败一筹,我当时就特别奇怪为什么Java这么差,语言排行还总是第一,现在想想当时还是懂的太少,太年轻。
由于c++/c#的工作对笔者来说已经没有太大的挑战,而且当时正好有一个机会去作Java EE 的开发,笔者做了一个大胆的决定,世界这么大,我想去看看,我去做了Java EE开发的那个职位。经过一段短暂的适应期,对于Java EE的开发就变的得心应手了,同时对于我当时对于Java和c#的看法也有了改变。c#语言确实牛,这一点上是无用质疑的,但是今天的Java已经不是一门语言,而变成了一个平台,Groovy,Javascript,Scala等动态语言和函数式语言使Java这个语言焕发了往日没有的青春,Java 1.6开始借助犀牛原生支持Javascript,和Groovy无缝集成,通过Scala完成函数式编程支持,然而这些语言都是跑在JVM上,无缝集成。所以从这个角度来看,Java和c#的竞争就像狼群和一只猛虎在打,老虎在猛也是没有办法打败群狼的,另外,spring这个全面的框架和Hibernate-Jboss等社区也给予了Java无比的支持,一个人再牛,怎么打的过整个世界呢?当然笔者说的是现在的状态,将来的结果也未可知。下面笔者列出一些简单的Groovy集合操作代码,让大家领会一下这些JVM语言都对Java做了多少改进。
assert [1,[2,3]].flatten() == [1,2,3]
assert [1,2,3].intersect([4,3,1])== [3,1]
assert [1,2,3].disjoint([4,5,6])
list = [1,2,3]
popped = list.pop()
assert popped == 3
assert list == [1,2]
assert [1,2].reverse() == [2,1]
assert [3,1,2].sort() == [1,2,3]
def list = [ [1,0], [0,1,2] ]
list = list.sort { a,b -> a[0] <=> b[0] }
assert list == [ [0,1,2], [1,0] ]
list = list.sort { item -> item.size() }
assert list == [ [1,0], [0,1,2] ]
list = ['a','b','c']
list.remove(2)
assert list == ['a','b']
list.remove('b')
assert list == ['a']
list = ['a','b','b','c']
list.removeAll(['b','c'])
assert list == ['a']
def doubled = [1,2,3].collect{ item ->
item*2
}
assert doubled == [2,4,6]
def odd = [1,2,3].findAll{ item ->
item % 2 == 1
}
assert odd == [1,3]