Scala 擁有您預期在函式程式語言中會出現的大部分功能,包括
- Lambda(匿名函數)
- 高階函數(HOF)
- 標準函式庫中的不可變集合
Lambda,也稱為匿名函數,是讓您的程式碼簡潔但可讀性高的重要部分。
List
類別的 map
方法是高階函數的典型範例,也就是將函數視為參數的函數。
這兩個範例是等效的,並顯示如何將清單中的每個數字乘以 2
,方法是將 lambda 傳遞到 map
方法中
val a = List(1, 2, 3).map(i => i * 2) // List(2,4,6)
val b = List(1, 2, 3).map(_ * 2) // List(2,4,6)
這些範例也等同於以下程式碼,其中使用 double
方法而不是 lambda
def double(i: Int): Int = i * 2
val a = List(1, 2, 3).map(i => double(i)) // List(2,4,6)
val b = List(1, 2, 3).map(double) // List(2,4,6)
如果您之前沒有看過
map
方法,它會將給定的函數套用至清單中的每個元素,產生包含結果值的清單。
將 lambda 傳遞給集合類別(例如 List
)上的高階函數是 Scala 體驗的一部分,您每天都會做這件事。
不可變集合
當您使用不可變集合(例如 List
、Vector
,以及不可變的 Map
和 Set
類別)時,重要的是要知道這些函數不會變異它們所呼叫的集合;相反地,它們會傳回包含已更新資料的新集合。因此,將它們以「流暢」的風格串連在一起以解決問題也很常見。
例如,這個範例顯示如何過濾集合兩次,然後將剩餘集合中的每個元素相乘
// a sample list
val nums = (1 to 10).toList // List(1,2,3,4,5,6,7,8,9,10)
// methods can be chained together as needed
val x = nums.filter(_ > 3)
.filter(_ < 7)
.map(_ * 10)
// result: x == List(40, 50, 60)
除了在標準函式庫中使用高階函式外,您也可以 建立自己的函式。
此頁面的貢獻者
內容
- 簡介
- Scala 特色
- 為什麼選擇 Scala 3?
- Scala 體驗
- Hello, World!
- REPL
- 變數和資料類型
- 控制結構
- 網域建模
- 方法
- 一級函數
- 單例物件
- 集合
- 情境抽象化
- 頂層定義
- 摘要
- 初探類型
- 字串內插
- 控制結構
- 網域建模
- 工具
- OOP 建模
- FP 建模
- 方法
- 方法特色
- Scala 3 中的主要方法
- 摘要
- 函式
- 匿名函式
- 函式變數
- Eta 展開
- 高階函式
- 撰寫自己的 map 方法
- 建立傳回函式的函式
- 摘要
- 封裝和匯入
- Scala 集合
- 集合類型
- 集合方法
- 摘要
- 函式程式設計
- 什麼是函式程式設計?
- 不可變值
- 純函式
- 函式是值
- 函式錯誤處理
- 摘要
- 類型和類型系統
- 推論類型
- 泛型
- 交集類型
- 聯集類型
- 代數資料類型
- 變異
- 不透明類型
- 結構類型
- 相依函式類型
- 其他類型
- 情境抽象化
- 擴充方法
- 情境參數
- 情境界限
- Given 匯入
- 類型類別
- 多重相等
- 隱式轉換
- 摘要
- 並行處理
- Scala 工具
- 使用 sbt 建立和測試 Scala 專案
- 工作表
- 與 Java 互動
- Java 開發人員的 Scala
- JavaScript 開發人員的 Scala
- Python 開發人員的 Scala
- 下一步