偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JDK 7中的函數(shù)式編程思想

原創(chuàng)
開(kāi)發(fā) 后端 新聞
原文作者的觀點(diǎn)是Lambda表達(dá)式一定會(huì)包含在JDK 7中,而全文也著重介紹了這方面的知識(shí),作者認(rèn)為函數(shù)式編程的概念也將出現(xiàn)在JDK 7中。

【51CTO外電頭條】關(guān)于JDK 7有太多讓人激動(dòng)和興奮的新特性,特別是Lambda表達(dá)式!如果你在搜索引擎中搜索JDK 7,你將會(huì)看到很多有關(guān)Lambda表達(dá)式的討論,一直以來(lái)它都是一個(gè)有爭(zhēng)議的話(huà)題,這也表明它受到了很多的關(guān)注,但也正因?yàn)槿绱耍陌l(fā)展腳步放緩了,并增加了決策的難度。

51CTO推薦閱讀:再探Java 7:***特性更新、代碼示例及性能測(cè)試

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

Lambda表達(dá)式

Lambda表達(dá)式并不是什么新概念,自Alonzo Church提出Lambda微積分的概念以來(lái),已經(jīng)有30個(gè)年頭了,從那時(shí)開(kāi)始,它們就成為許多函數(shù)式編程語(yǔ)言的重要特性,最突出的可能要算Lisp,現(xiàn)在Lambda表達(dá)式已經(jīng)躋身于函數(shù)式編程語(yǔ)言的一等公民。Lambda表達(dá)式是一個(gè)匿名函數(shù),為了演示,這里有一個(gè)段你可能經(jīng)??吹降腜ython代碼段:

  1. list = [1, 2, 3, 6, 8,]  
  2. print filter(Lambda x: x * 2 > 10, list)  
  3. [6, 8] 

表達(dá)式"Lambda x: x * 2 > 10"是一個(gè)Lambda函數(shù),在運(yùn)行時(shí)它是匿名的,在filter函數(shù)中執(zhí)行,類(lèi)似地,你可以將相同的表達(dá)式賦給一個(gè)變量進(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 

在Java中,我們目前有匿名內(nèi)部類(lèi)證明Lambda表達(dá)式是匿名的,當(dāng)傳遞給它一個(gè)方法時(shí),它們就是一個(gè)普通的對(duì)象,如:

  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. })); 

現(xiàn)在可以將Lambda表達(dá)式簡(jiǎn)單地當(dāng)作一個(gè)匿名函數(shù),在Java中,這可能意味著“回調(diào)”,真正的遞歸和其它功能,或許實(shí)現(xiàn)Comparator(比較器)接口篩選集合的日子將一去不復(fù)還了,如果它們?cè)贘DK 7中完成,預(yù)計(jì)我們將看到一個(gè)更加動(dòng)態(tài)的語(yǔ)言。

函數(shù)類(lèi)型

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

閉包

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

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

高階函數(shù)

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

局部套用函數(shù)

局部套用函數(shù)***解釋為“鏈條式”Lambda表達(dá)式,對(duì)于一個(gè)可接受多個(gè)參數(shù)的函數(shù),局部套用函數(shù)是函數(shù)轉(zhuǎn)換的過(guò)程,以便每個(gè)參數(shù)都被傳遞給函數(shù),然后根據(jù)原始的函數(shù)調(diào)用返回。

  1. // "mul" is function that takes two arguments; both ints  
  2. mul(5).(5); // returns 25 

其它還不錯(cuò)的函數(shù)式編程概念

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

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

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

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

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

小結(jié)

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

原文作者:Alex Collins

原文名:Functional Programming Concepts in JDK 7

原文地址:http://java.dzone.com/articles/lambdas-closures-jdk-7

【編輯推薦】

  1. 淺談Java 7的閉包與Lambda表達(dá)式之優(yōu)劣
  2. 探秘JDK 7:將會(huì)出現(xiàn)新的語(yǔ)言特性
  3. 為什么大家都覺(jué)得函數(shù)式編程將會(huì)流行?
  4. 對(duì)象函數(shù)式編程 Scala簡(jiǎn)史
  5. TechED 09視頻專(zhuān)訪(fǎng):F#與函數(shù)式編程語(yǔ)言
責(zé)任編輯:王曉東 來(lái)源: 51CTO
相關(guān)推薦

2011-10-19 15:47:13

2010-06-22 13:32:26

函數(shù)式編程JavaScript

2017-10-17 16:23:58

函數(shù)式編程ReduxReact

2013-09-09 09:41:34

2012-09-21 09:21:44

函數(shù)式編程函數(shù)式語(yǔ)言編程

2020-09-23 16:07:52

JavaScript函數(shù)柯里化

2020-02-06 19:12:36

Java函數(shù)式編程編程語(yǔ)言

2024-12-05 10:37:36

Java純函數(shù)final

2011-12-27 10:17:56

JDKJava

2013-05-16 10:42:20

2023-10-07 00:01:02

Java函數(shù)

2016-10-31 20:46:22

函數(shù)式編程Javascript

2011-03-08 15:47:32

函數(shù)式編程

2020-09-24 10:57:12

編程函數(shù)式前端

2025-03-11 10:00:20

Golang編程函數(shù)

2011-08-24 09:13:40

編程

2023-12-14 15:31:43

函數(shù)式編程python編程

2022-09-22 08:19:26

WebFlux函數(shù)式編程

2024-02-28 08:37:28

Lambda表達(dá)式Java函數(shù)式接口

2013-03-04 10:03:17

Python函數(shù)式編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)