Στη 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)
})
})
})
})
}
Οι εκφράσεις use της Gleam μάς επιτρέπουν να γράψουμε αυτόν τον κώδικα χωρίς την εσοχή, κάνοντάς τον συχνά πιο εύκολο στην ανάγνωση.
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)
}
Οι εκφράσεις use της Gleam είναι μια πολύ ισχυρή δυνατότητα που μπορεί να εφαρμοστεί σε πάρα πολλά προβλήματα, αλλά όταν χρησιμοποιούνται υπερβολικά μπορούν να κάνουν τον κώδικα δύσκολο στην ανάγνωση. Συνήθως προτιμάται να χρησιμοποιείς τη συνηθισμένη σύνταξη κλήσης συνάρτησης και να καταφεύγεις σε εκφράσεις use μόνο όταν κάνουν τον κώδικα πιο εύκολο στην ανάγνωση.