Java 函數語言程式設計 - 概述
在函數語言程式設計正規化中,應用程式主要使用純函式編寫。純函式是指沒有副作用的函式。副作用的一個例子是在函式返回一個值的同時修改例項級變數。
以下是函數語言程式設計的關鍵方面。
函式 - 函式是一組執行特定任務的語句塊。函式接受資料,處理資料並返回結果。編寫函式的主要目的是為了支援可重用性的概念。一旦編寫了函式,就可以輕鬆呼叫它,而無需一遍遍地編寫相同的程式碼。
函數語言程式設計圍繞一等函式、純函式和高階函式展開。
一等函式是指可以使用諸如字串、數字等一等實體作為引數、可以作為返回值或賦值給變數的函式。
高階函式是指可以將函式作為引數和/或可以返回函式的函式。
純函式是指在執行期間沒有副作用的函式。
函式組合 - 在指令式程式設計中,函式用於組織可執行程式碼,重點在於程式碼的組織。但在函數語言程式設計中,重點在於函式如何組織和組合。通常,資料和函式一起作為引數傳遞並返回。這使得程式設計更強大、更具表現力。
流暢介面 - 流暢介面有助於編寫易於編寫和理解的表示式。當每個方法的返回型別再次被重用時,這些介面有助於連結方法呼叫。例如 -
LocalDate futureDate = LocalDate.now().plusYears(2).plusDays(3);
急切求值 vs 惰性求值 - 急切求值表示表示式在其遇到的第一時間進行求值,而惰性求值是指延遲執行直到滿足某些條件。例如,Java 8 中的流方法在遇到終止方法時才進行求值。
持久化資料結構
- 持久化資料結構保持其以前的版本。每當資料結構狀態發生變化時,都會建立一個新的結構副本,因此資料結構保持不變。這種不可變集合是執行緒安全的。遞迴 - 可以透過迴圈或更優雅地使用遞迴來完成重複計算。如果函式呼叫自身,則該函式稱為遞迴函式。
並行性 - 沒有副作用的函式可以按任意順序呼叫,因此是惰性求值的候選者。Java 中的函數語言程式設計使用流支援並行性,其中提供並行處理。
Optional - Optional 是一個特殊的類,它強制函式永遠不返回 null。它應該使用 Optional 類物件返回值。此返回的物件具有 isPresent 方法,可以檢查該方法以僅在存在時獲取值。