成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JDK 7中的函數式編程思想

原創
開發 后端 新聞
原文作者的觀點是Lambda表達式一定會包含在JDK 7中,而全文也著重介紹了這方面的知識,作者認為函數式編程的概念也將出現在JDK 7中。

【51CTO外電頭條】關于JDK 7有太多讓人激動和興奮的新特性,特別是Lambda表達式!如果你在搜索引擎中搜索JDK 7,你將會看到很多有關Lambda表達式的討論,一直以來它都是一個有爭議的話題,這也表明它受到了很多的關注,但也正因為如此,它的發展腳步放緩了,并增加了決策的難度。

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

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

Lambda表達式

Lambda表達式并不是什么新概念,自Alonzo Church提出Lambda微積分的概念以來,已經有30個年頭了,從那時開始,它們就成為許多函數式編程語言的重要特性,最突出的可能要算Lisp,現在Lambda表達式已經躋身于函數式編程語言的一等公民。Lambda表達式是一個匿名函數,為了演示,這里有一個段你可能經常看到的Python代碼段:

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

表達式"Lambda x: x * 2 > 10"是一個Lambda函數,在運行時它是匿名的,在filter函數中執行,類似地,你可以將相同的表達式賦給一個變量進行傳遞,或調用函數自身:

  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中,我們目前有匿名內部類證明Lambda表達式是匿名的,當傳遞給它一個方法時,它們就是一個普通的對象,如:

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

現在可以將Lambda表達式簡單地當作一個匿名函數,在Java中,這可能意味著“回調”,真正的遞歸和其它功能,或許實現Comparator(比較器)接口篩選集合的日子將一去不復還了,如果它們在JDK 7中完成,預計我們將看到一個更加動態的語言。

函數類型

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

閉包

你應該聽說過閉包的概念,它是另一個非常簡單的函數式編程概念,它允許在一個函數中包括另一個函數,并可以在內部函數中引用外部變量,這種變量被稱作“自由變量”,因為它們不是閉包的參數,也不是局部變量。

實際上,如果你閱讀過有關JDK 7的文章,你會發現閉包一詞的出現頻率比Lambda表達式還要多,這是因為它倆通常是一起出現的,當Lambda表達式訪問外部變量時,它就變成閉包,根據定義,閉包也是一種Lambda表達式。

高階函數

高階函數是指取得或返回另一個函數的函數,在本文開頭的Python代碼示例中,你應該已經看到了filter函數,它就是一個高階函數,因為它的***個參數是一個函數,這個函數用于測試列表(第二個參數)中每個元素的內容。

局部套用函數

局部套用函數***解釋為“鏈條式”Lambda表達式,對于一個可接受多個參數的函數,局部套用函數是函數轉換的過程,以便每個參數都被傳遞給函數,然后根據原始的函數調用返回。

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

其它還不錯的函數式編程概念

其它我認為還不錯的函數式編程概念有:

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

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

函數式編程有什么意義?

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

小結

編程世界總是充斥著其它新時代的思想和傳統,函數式編程只是其中一個優秀的軟件開發方法,各有利弊,它可能會幫助你寫出更好的軟件。不管如何,我相信Lambda表達式項目一定可以完成,雖然它仍然存在缺陷,但它會給編程語言帶來新鮮空氣,也必將會受到開發者的歡迎。

原文作者:Alex Collins

原文名:Functional Programming Concepts in JDK 7

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

【編輯推薦】

  1. 淺談Java 7的閉包與Lambda表達式之優劣
  2. 探秘JDK 7:將會出現新的語言特性
  3. 為什么大家都覺得函數式編程將會流行?
  4. 對象函數式編程 Scala簡史
  5. TechED 09視頻專訪:F#與函數式編程語言
責任編輯:王曉東 來源: 51CTO
相關推薦

2011-10-19 15:47:13

2010-06-22 13:32:26

函數式編程JavaScript

2017-10-17 16:23:58

函數式編程ReduxReact

2013-09-09 09:41:34

2012-09-21 09:21:44

函數式編程函數式語言編程

2020-09-23 16:07:52

JavaScript函數柯里化

2024-12-05 10:37:36

Java純函數final

2020-02-06 19:12:36

Java函數式編程編程語言

2011-12-27 10:17:56

JDKJava

2023-10-07 00:01:02

Java函數

2013-05-16 10:42:20

2011-08-24 09:13:40

編程

2023-12-14 15:31:43

函數式編程python編程

2022-09-22 08:19:26

WebFlux函數式編程

2016-10-31 20:46:22

函數式編程Javascript

2011-03-08 15:47:32

函數式編程

2020-09-24 10:57:12

編程函數式前端

2025-03-11 10:00:20

Golang編程函數

2024-02-28 08:37:28

Lambda表達式Java函數式接口

2013-03-04 10:03:17

Python函數式編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线观看 | 亚洲精品一区二区三区 | 91精品中文字幕一区二区三区 | 成人在线视频网 | 黄a在线播放 | 男人的天堂在线视频 | 国产免费又色又爽又黄在线观看 | 国产91亚洲精品一区二区三区 | 无码日韩精品一区二区免费 | 日韩精品在线免费观看 | 国产精品国产自产拍高清 | 精品国产久 | 国产精品18久久久久久久 | www.jizzjizz| 日韩在线小视频 | 日韩精品一区二区三区中文字幕 | 成人免费视频 | 91porn国产成人福利 | 日韩一区二区av | 色婷婷综合久久久久中文一区二区 | 成人一区二区三区在线 | 亚洲三级av | 国产精品日韩在线 | 国产成人免费视频 | 日韩福利在线 | 毛片一区二区三区 | 四虎影院新网址 | 日韩av一区二区在线观看 | 日韩精品视频网 | 色.com| 日韩电影在线一区 | 99在线播放 | 日韩一区二区在线观看 | 免费观看一级特黄欧美大片 | 视频1区 | 国产成人久久精品 | av在线成人 | 成人亚洲精品久久久久软件 | 中文字幕国产一区 | 亚洲精品一区二区三区蜜桃久 | 免费激情 |