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 एक्सप्रेशन का सहारा तभी लेना चाहिए जब उनसे कोड पढ़ने में आसान हो जाए।