軌道
/
Gleam
Gleam
/
課程大綱
/
Use 運算式
Us

Use 運算式 在 Gleam

2 個練習

關於 Use 運算式

在 Gleam 裡,撰寫並使用高階函式是很常見的事,也就是說,這種函式會把其他函式當作引數。有時候同時使用許多高階函式,程式碼會變得難以閱讀,因為會出現很多層縮排。

例如,這裡有一個函式,它呼叫了幾個回傳 Result(Int, Nil) 的函式,並在四個都成功時把這些值加總起來。

import gleam/result

pub fn main() -> Result(Int, Nil) {
  result.try(function1(), fn(a) {
    result.try(function2(), fn(b) {
      result.try(function3(), fn(c) {
        result.try(function4(), fn(d) {
          Ok(a + b + c + d)
        })
      })
    })
  })
}

Gleam 的 use 運算式讓我們不用縮排就能寫出這段程式碼,通常也讓程式碼更容易閱讀。

import gleam/result

pub fn main() -> Result(Int, Nil) {
  use a <- result.try(function1())
  use b <- result.try(function2())
  use c <- result.try(function3())
  use d <- result.try(function4())
  Ok(a + b + c + d)
}

use 運算式會收集程式區塊中後續的所有敘述,並把它們當作回呼函式,作為最後一個引數傳給該函式呼叫。介於 use 關鍵字與 <- 符號之間的變數,就是將傳給回呼函式的引數名稱。

// This use expression
use a <- function(1, 2)
io.println("Hello!")
a

// Is equivalent to this normal function call
function(1, 2, fn(a) {
  io.println("Hello!")
  a
})

回呼函式可以接受任意數量的引數,也可以完全不接受。

use a, b, c, d <- call_4_function()

use <- call_0_function()

要建立一個能用 use 運算式呼叫的函式,並沒有什麼特別的要求,只要把回呼函式當作最後一個引數就好。

pub fn call_twice(function: fn() -> t) -> #(t, t) {
  let first = function()
  let second = function()
  #(first, second)
}

Gleam 的 use 運算式是非常強大的功能,可以運用在許多問題上,但用得太過火時,反而會讓程式碼難以閱讀。一般來說,最好還是使用一般的函式呼叫語法,只有在 use 運算式能讓程式碼更容易閱讀時才用它。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 Use 運算式