
1. Java 8函式式編程
1.1. 沒有單子
1.2. 沒有語言層面的惰性求值
1.3. 沒有為不可變性提供額外支持
1.4. 集合類可以擁有一些額外的方法:default方法
2. 現實世界中,資料和行為并存
2.1. 面向物件編程是對資料進行抽象
2.2. 函式式編程是對行為進行抽象
3. 函式式編程
3.1. 在思考問題時,使用不可變值和函式,函式對一個值進行處理,映射成另一個值
3.2. 關心的是如何寫出好代碼,而不是符合函式式編程風格的代碼
3.3. 使用Lambda運算式,就是將復雜性抽象到類別庫的程序
4. 匿名內部類
4.1. 目的
4.1.1. 為了方便Java程式員將代碼作為資料傳遞
4.2. 傳入一個實作某介面的物件
4.3. 顯式地宣告引數型別
5. Lambda運算式
5.1. 一個匿名方法,將行為像資料一樣進行傳遞
5.1.1. 一種緊湊的、傳遞行為的方式
5.1.2. 傳入了一段代碼塊——一個沒有名字的函式
5.1.3. 無需指定型別,程式依然可以編譯
5.2. 形式
5.2.1. 不包含引數,使用空括號()表示沒有引數
5.2.2. 包含且只包含一個引數,可省略引數的括號
5.2.3. 可以是一段代碼塊,使用大括號({})將代碼塊括起來
5.2.4. 包含多個引數的方法
5.2.5. 顯式宣告引數型別,此時就需要使用小括號將引數括起來,多個引數的情況也是如此
5.3. 常見結構
5.3.1. BinaryOperator add=(x, y) → x+y
5.4. 參考值,而不是變數
5.4.1. 將變數宣告為final
5.4.1.1. 意味著不能為其重復賦值
5.4.1.2. 是在使用賦給該變數的一個特定的值
5.4.1.3. Java8可以參考非final變數,但是該變數在既成事實上必須是final
5.4.2. 未賦值的變數與周邊環境隔離起來,進而被系結到一個特定的值
5.4.2.1. 閉包
5.5. Lambda運算式的型別依賴于背景關系環境,是由編譯器推斷出來的
5.6. 目標型別是指Lambda運算式所在背景關系環境的型別
6. 函式介面
6.1. 只有一個抽象方法的介面
6.2. Lambda運算式本身的型別
6.3. 介面中單一方法的命名并不重要,只要方法簽名和Lambda運算式的型別匹配即可
6.3.1. 為引數起一個有意義的名字,增加代碼易讀性
6.4. 
7. 型別推斷
7.1. 程式依然要經過型別檢查來保證運行的安全性,但不用再顯式宣告型別罷了
7.2. 省略型別資訊可以減少干擾,更易弄清狀況
7.3. 需要型別資訊幫助理解代碼
7.4. 一開始型別資訊是有用的,但隨后可以只在真正需要時才加上型別資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/542411.html
標籤:其他
下一篇:Python內置函式
