歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java比較C#勝在何處

語言之爭一直都有,但是本文確無意挑起這一爭端,所以只談事實,談情懷,談理想..

先說說自己的經歷吧,想對來說我是同時接觸這兩門語言的,記得當時Java崛起的時候才剛剛聽說C#,自己拿著一本《Java編程思想》經常拜讀一下,看著Bruce 吹的一切皆為對象,自動垃圾回收等等NB的特性不由得驚歎,相對於我們當時學校裡面教的C語言確實先進啊。

Java編程思想(第4版) 中文清晰PDF完整版  http://www.linuxidc.com/Linux/2014-08/105403.htm

Java編程思想(第4版)中文完整版+源代碼  http://www.linuxidc.com/Linux/2011-11/48069.htm

後來漸漸參與各種項目,工作,等等原因,在最初的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]

總結

本文簡單的描述了筆者對於Java和C#的個人理解,希望與大家共勉,不談爭辯,只談理想,談情懷..

Copyright © Linux教程網 All Rights Reserved