Java是一種杰出的產(chǎn)業(yè)開(kāi)發(fā)語(yǔ)言,這是因?yàn)樗鼛?lái)了偉大的統(tǒng)一和對(duì)事實(shí)上以前并不存在的重要標(biāo)準(zhǔn)的關(guān)注。但是和所有語(yǔ)言一樣,Java將來(lái)也會(huì)褪色。依據(jù)我做的超越Java的研究,一個(gè)重復(fù)出現(xiàn)的主題是有越來(lái)越多的人相信Java已不再足夠的有效率。以下一組技術(shù)可以使你更有效率。他們不是對(duì)所有的工程都適合,但當(dāng)被應(yīng)用于適合的工程時(shí),他們是優(yōu)秀的工具。
1.動(dòng)態(tài)語(yǔ)言
動(dòng)態(tài)語(yǔ)言可以比像C++或Java這樣的靜態(tài)語(yǔ)言更加有效率。他們可以讓你用更少的語(yǔ)言表達(dá)更多的意思。這里,我會(huì)關(guān)注現(xiàn)在新出現(xiàn)最流行的動(dòng)態(tài)語(yǔ)言Ruby。用Ruby的"Hello, World"和Java的作一個(gè)比較:
puts "Hello, world."
這顯然既簡(jiǎn)單又明了。你不需要寫(xiě)一些其他的代碼去做這件事。下面是用Java語(yǔ)言的描述:
class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!") }}
在Java中,類型是靜態(tài)的。這就代表了編譯器要檢查所有的類型;你必須建立和編譯一個(gè)完整的程序。在Ruby中,類型是動(dòng)態(tài)的,所以你不需要去聲明他們,你可以馬上編寫(xiě)和運(yùn)行他們。下面是用兩種語(yǔ)言描述的Fibonacci 序列:
First, Ruby:x1, x2 = 0, 1 //110.times do puts x2 x1, x2 = x2, x1+x2 //4end
注意到在第一、四行同時(shí)聲明兩個(gè)變量,讓你可以簡(jiǎn)潔地表達(dá)兩種不同的聲明形式。
另外,注意到10是一個(gè)對(duì)象,它支持方法,如:times。再另外,在do和end之間是一個(gè)代碼塊。
Ruby代碼塊可以讓你把代碼塊傳入方法。。這種技術(shù)導(dǎo)致了難以置信的效率和簡(jiǎn)潔的代碼。
接下來(lái),看一看用Java實(shí)現(xiàn)的代碼:
class Fib { public static void main (String args[]) { int x1 = 0; int x2 = 1; int total = 1; for (int i=0; i<10; i++) { System.out.println(total); total = x1+x2; x1 = x2; x2 = total; } }}
你需要去聲明所有的變量,以及詳細(xì)地寫(xiě)出來(lái)你用for循環(huán)實(shí)現(xiàn)的迭代。每個(gè)變量都是獨(dú)立的,所以你必須有一個(gè)臨時(shí)變量用于存放total。
相比,動(dòng)態(tài)語(yǔ)言更為簡(jiǎn)潔。按照一個(gè)普通的規(guī)則,如果你可以寫(xiě)更少的代碼而不犧牲可讀性,這些代碼將導(dǎo)致更高的效率。
(但是你不可以犧牲可讀性來(lái)達(dá)到這一步,我們可以以Perl舉例作為結(jié)尾。)
更為重要的是,動(dòng)態(tài)語(yǔ)言在Java開(kāi)發(fā)者想要去解決的重要問(wèn)題上表現(xiàn)得更好,如: 元編程。 Hibernate 使用元編程技術(shù)使對(duì)象持久化。
Spring使用元編程來(lái)為Java對(duì)象增加服務(wù),而免除你為他們構(gòu)建額外支持的煩惱。在Rails框架上,當(dāng)紅的Ruby利用了自己能力來(lái)構(gòu)建某種已存的
最有效率的應(yīng)用開(kāi)發(fā)框架。
令人驚訝的是,許多Java開(kāi)發(fā)者采用了Ruby。Ant和Tomcat的發(fā)明者James Duncan Davidson正在Rails上使用Ruby,以及Java的暢銷書(shū)作者之一,JSP專家組的
成員David Geary正在寫(xiě)一本關(guān)于Rails上的Rub的書(shū)y。許多在Java社區(qū)里有著聰明思想的人都轉(zhuǎn)向使用像Ruby一樣的動(dòng)態(tài)語(yǔ)言。這是因?yàn)檫@種新出現(xiàn)的語(yǔ)言能更好的解決最有興趣的問(wèn)題。動(dòng)態(tài)語(yǔ)言將不會(huì)完全取代Java,但是他們會(huì)適合于解決小的,輕量級(jí)的問(wèn)題。