計(jì)算機(jī)二級(jí)java輔導(dǎo):閉包能讓JAVA語(yǔ)言變得簡(jiǎn)潔嗎?

字號(hào):

眾所周知,JAVA語(yǔ)言一直因其語(yǔ)法上的簡(jiǎn)潔優(yōu)雅(JAVA1.5中泛型的引入或多或少改變了這點(diǎn))而被大部分人所喜愛(ài).
    但另一方面,語(yǔ)法上的簡(jiǎn)潔也造成了使用上的一些不方便.譬如,你只想實(shí)現(xiàn)往控制臺(tái)輸出一個(gè)"Hello,world",你也得老老實(shí)實(shí)先寫一個(gè)class,然后再寫一個(gè)public static void main(String[] args)方法,最后才是System.out.println("Hello,world");而如果使用Python之類的語(yǔ)言,可能只需一行代碼就搞定了.
    當(dāng)然,上面這個(gè)例子看起來(lái)不是那么有說(shuō)服力.不過(guò)如果你做過(guò)GUI開(kāi)發(fā)的話,你就會(huì)感受到"Everything is an object"所帶來(lái)的不便之處了.為了監(jiān)聽(tīng)GUI事件并做出相應(yīng)的反應(yīng),你會(huì)大量用到匿名類(而實(shí)際上你的目的只是要傳入一個(gè)回調(diào)方法而已),這樣不僅做了一些額外不必要的工作,也給代碼的可讀性造成一定影響.譬如這類的問(wèn)題還有很多,Stevey寫過(guò)一篇文章:名詞的王國(guó)(Execution in the Kingdom of Nouns),用形象生動(dòng)的語(yǔ)言描敘了為什么使用JAVA會(huì)讓某些工作變得的啰嗦.他的觀點(diǎn)是由于JAVA中的"everything is an object",在某些時(shí)候限制了我們用清晰而合理的表達(dá)方式來(lái)表述我們的思想.
    在JAVA誕生以來(lái),語(yǔ)法上的變動(dòng)可能就是在JAVA 1.5中泛型的引入了.而且隨著JAVA的開(kāi)源,以后可能會(huì)有更多的元素被引入到JAVA語(yǔ)言里面來(lái)(官方的或非官方的).目前正在進(jìn)行中的JDK7就有可能增加一些新的語(yǔ)言特性(見(jiàn)javapolis舉行的關(guān)于JAVA7語(yǔ)言特性投票的結(jié)果),其中最重大的改變莫過(guò)于閉包的引入了.毫無(wú)疑問(wèn),這些語(yǔ)言特性的引入都是為了讓我們這些Javaer活的更輕松一些.那么,閉包能改善目前JAVA語(yǔ)言所存在不足嗎?就是說(shuō)閉包能夠讓我們寫出簡(jiǎn)單而易讀的代碼嗎?要知道閉包并不是一個(gè)面向?qū)ο蟮臇|東.Bruce Eckel在他的文章Will Closures Make Java Less Verbose里討論了這個(gè)問(wèn)題.并且在文章的末尾,他提出了一個(gè)很大膽的想法JAVA 3K(其實(shí)我也一直這么想的^_^):引用我們知道Python有個(gè)Python 3000計(jì)劃,這個(gè)Python 3000相對(duì)之前的Python有大幅度的修改,并且不兼容之前的Python語(yǔ)法,這樣可以完全擺脫因考慮向后兼容性而帶來(lái)的不必要的負(fù)擔(dān).那么我們?yōu)槭裁匆哺銈€(gè)JAVA 3000呢?它與之前的JAVA有著類似的語(yǔ)法,并且也能運(yùn)行在JVM上,但語(yǔ)法上與原有JAVA語(yǔ)言不兼容.在JAVA 3K里面我們可以有真正的泛型,閉包,并且可以丟棄掉int那些基本類型.對(duì)于那些想繼續(xù)使用原有JAVA的人來(lái)說(shuō)繼續(xù)用就是了,而程序員想學(xué)習(xí)新的JAVA語(yǔ)言也很容易.