亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3872 | 回復(fù): 0
打印 上一主題 下一主題

JDK 7中的函數(shù)式編程思想 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-12-30 14:16 |只看該作者 |倒序?yàn)g覽
JDK 7中的函數(shù)式編程思想



關(guān)于JDK 7有太多讓人激動和興奮的新特性,特別是Lambda表達(dá)式!如果你在搜索引擎中搜索JDK 7,你將會看到很多有關(guān)Lambda表達(dá)式的討論,一直以來它都是一個有爭議的話題,這也表明它受到了很多的關(guān)注,但也正因?yàn)槿绱,它的發(fā)展腳步放緩了,并增加了決策的難度。


我的觀點(diǎn)是Lambda表達(dá)式一定會包含在JDK 7中,你可以從網(wǎng)上或快照生成中看到大量的跡象。本文是為那些尚不了解函數(shù)式編程,或不知道Lambda表達(dá)式,閉包或局部套用函數(shù)是什么的人而寫的。

Lambda表達(dá)式

Lambda表達(dá)式并不是什么新概念,自Alonzo Church提出Lambda微積分的概念以來,已經(jīng)有30個年頭了,從那時開始,它們就成為許多函數(shù)式編程語言的重要特性,最突出的可能要算Lisp,現(xiàn)在Lambda表達(dá)式已經(jīng)躋身于函數(shù)式編程語言的一等公民。Lambda表達(dá)式是一個匿名函數(shù),為了演示,這里有一個段你可能經(jīng)?吹降腜ython代碼段:
  1. list = [1, 2, 3, 6, 8,]  
  2. print filter(Lambda x: x * 2 > 10, list)  
  3. [6, 8]
復(fù)制代碼
表達(dá)式"Lambda x: x * 2 > 10"是一個Lambda函數(shù),在運(yùn)行時它是匿名的,在filter函數(shù)中執(zhí)行,類似地,你可以將相同的表達(dá)式賦給一個變量進(jìn)行傳遞,或調(diào)用函數(shù)自身:
  1. f = Lambda x: x * 2 > 10  
  2. print filter(f, list)  
  3. [6, 8]  
  4. # Let's call f itself  
  5. f(1)  
  6. False
復(fù)制代碼
在Java中,我們目前有匿名內(nèi)部類證明Lambda表達(dá)式是匿名的,當(dāng)傳遞給它一個方法時,它們就是一個普通的對象,如:
  1. File cwd = new File(".);  
  2. System.out.println(cwd.list(new FileFilter() {      
  3. public boolean accept(File f) {         
  4. return f != null && f.getName().endsWith(".java");      
  5. }  
  6. }));
復(fù)制代碼
現(xiàn)在可以將Lambda表達(dá)式簡單地當(dāng)作一個匿名函數(shù),在Java中,這可能意味著“回調(diào)”,真正的遞歸和其它功能,或許實(shí)現(xiàn)Comparator(比較器)接口篩選集合的日子將一去不復(fù)還了,如果它們在JDK 7中完成,預(yù)計我們將看到一個更加動態(tài)的語言。

函數(shù)類型

正如前面提到的,Lambda表達(dá)式將引入另一個函數(shù)式編程概念:函數(shù)類型。它僅僅指的是將函數(shù)作為對象看待,就象是一個String或BigDecimal,它允許你象其它類型那樣將其傳遞給其它函數(shù)。

閉包

你應(yīng)該聽說過閉包的概念,它是另一個非常簡單的函數(shù)式編程概念,它允許在一個函數(shù)中包括另一個函數(shù),并可以在內(nèi)部函數(shù)中引用外部變量,這種變量被稱作“自由變量”,因?yàn)樗鼈儾皇情]包的參數(shù),也不是局部變量。

實(shí)際上,如果你閱讀過有關(guān)JDK 7的文章,你會發(fā)現(xiàn)閉包一詞的出現(xiàn)頻率比Lambda表達(dá)式還要多,這是因?yàn)樗鼈z通常是一起出現(xiàn)的,當(dāng)Lambda表達(dá)式訪問外部變量時,它就變成閉包,根據(jù)定義,閉包也是一種Lambda表達(dá)式。

高階函數(shù)

高階函數(shù)是指取得或返回另一個函數(shù)的函數(shù),在本文開頭的Python代碼示例中,你應(yīng)該已經(jīng)看到了filter函數(shù),它就是一個高階函數(shù),因?yàn)樗牡谝粋參數(shù)是一個函數(shù),這個函數(shù)用于測試列表(第二個參數(shù))中每個元素的內(nèi)容。

局部套用函數(shù)

局部套用函數(shù)最好解釋為“鏈條式”Lambda表達(dá)式,對于一個可接受多個參數(shù)的函數(shù),局部套用函數(shù)是函數(shù)轉(zhuǎn)換的過程,以便每個參數(shù)都被傳遞給函數(shù),然后根據(jù)原始的函數(shù)調(diào)用返回。
  1. // "mul" is function that takes two arguments;
  2. both ints  mul(5).(5); // returns 25
復(fù)制代碼
其它還不錯的函數(shù)式編程概念

其它我認(rèn)為還不錯的函數(shù)式編程概念有:

◆列表解析 – 為在一行命令中生成列表(集,映射等)的語法裝飾,如“List<String> l = (for x in someOtherCollection) { x.someMethod() && x.another(); }”

◆尾遞歸 – 在語句的末尾調(diào)用自己的函數(shù),編譯器(或運(yùn)行時環(huán)境)可以識別它,因此代碼可以得到明顯的優(yōu)化。

函數(shù)式編程有什么意義?

問得好,函數(shù)式編程的好處有許多,最明顯的是整體代碼量更少了,不用再為文件名過濾和比較等功能實(shí)現(xiàn)接口,你可以直接傳遞函數(shù)了。

小結(jié)

編程世界總是充斥著其它新時代的思想和傳統(tǒng),函數(shù)式編程只是其中一個優(yōu)秀的軟件開發(fā)方法,各有利弊,它可能會幫助你寫出更好的軟件。不管如何,我相信Lambda表達(dá)式項(xiàng)目一定可以完成,雖然它仍然存在缺陷,但它會給編程語言帶來新鮮空氣,也必將會受到開發(fā)者的歡迎。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP