Scala 3 — 書籍

一級函數

語言

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 體驗的一部分,您每天都會做這件事。

不可變集合

當您使用不可變集合(例如 ListVector,以及不可變的 MapSet 類別)時,重要的是要知道這些函數不會變異它們所呼叫的集合;相反地,它們會傳回包含已更新資料的新集合。因此,將它們以「流暢」的風格串連在一起以解決問題也很常見。

例如,這個範例顯示如何過濾集合兩次,然後將剩餘集合中的每個元素相乘

// 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)

除了在標準函式庫中使用高階函式外,您也可以 建立自己的函式

此頁面的貢獻者