Η Gleam έχει συναρτήσεις πρώτης κλάσης, που σημαίνει ότι οι συναρτήσεις είναι κανονικές τιμές που μπορούν να εκχωρηθούν σε μεταβλητές, να περαστούν ως ορίσματα και να επιστραφούν από άλλες συναρτήσεις.
Μια συνάρτηση με όνομα που ορίζεται σε ένα module μπορεί να αναφερθεί με το όνομά της.
pub fn main() {
// Assign the function to a variable
let f = add_one
// Invoke the function
f(1) // -> 2
f(2) // -> 3
}
fn add_one(x) {
x + 1
}
Η Gleam έχει επίσης ανώνυμες συναρτήσεις, οι οποίες ορίζονται μέσα σε άλλες συναρτήσεις.
// Define the function
let f = fn(x) { x + 1 }
// Invoke the function
f(1) // -> 2
f(2) // -> 3
Ο τύπος μιας συνάρτησης γράφεται με σύνταξη παρόμοια με αυτή των ανώνυμων συναρτήσεων. Ο τύπος μιας συνάρτησης που παίρνει ένα Int και ένα Float και επιστρέφει ένα Int γράφεται έτσι:
fn(Int, Float) -> Int
Οι ανώνυμες συναρτήσεις μπορούν να αναφέρονται σε μεταβλητές που ήταν στην εμβέλεια όταν ορίστηκαν, γεγονός που τις κάνει κλειστότητες.
let secret_number = 42
// This function always returns 42
fn() { secret_number }
Η σύνταξη σύλληψης συνάρτησης παρέχει έναν βολικό συντομογραφικό τρόπο για τη δημιουργία ανώνυμων συναρτήσεων που περνούν ένα μόνο όρισμα σε μια συνάρτηση. Αυτές οι δύο εκφράσεις είναι ισοδύναμες:
// Anonymous function syntax
let f = fn(x) { my_function(1, 2, x) }
// Function capture syntax
let f = my_function(1, 2, _)
Σε αυτή την άσκηση, σου έχει ανατεθεί να γράψεις το λογισμικό για μια συσκευή κρυπτογράφησης που λειτουργεί εκτελώντας μετασχηματισμούς σε δεδομένα. Χρειάζεσαι έναν τρόπο να δημιουργείς ευέλικτα πολύπλοκες συναρτήσεις συνδυάζοντας απλούστερες συναρτήσεις μεταξύ τους.
Για κάθε εργασία, επέστρεψε μια ανώνυμη συνάρτηση που μπορεί να κληθεί από το περιβάλλον κλήσης.
Υλοποίησε τη secret_add. Θα πρέπει να επιστρέφει μια συνάρτηση που παίρνει ένα όρισμα και του προσθέτει το όρισμα που περνάς στη secret_add.
let adder = secret_add(2)
adder(2)
// -> 4
Υλοποίησε τη secret_subtract. Θα πρέπει να επιστρέφει μια συνάρτηση που παίρνει ένα όρισμα και του αφαιρεί το μυστικό που περνάς στη secret_subtract.
let subtractor = secret_subtract(2)
subtractor(3)
// -> 1
Υλοποίησε τη secret_multiply. Θα πρέπει να επιστρέφει μια συνάρτηση που παίρνει ένα όρισμα και το πολλαπλασιάζει με το μυστικό που περνάς στη secret_multiply.
let multiplier = secret_multiply(7)
multiplier(3)
// -> 21
Υλοποίησε τη secret_divide. Θα πρέπει να επιστρέφει μια συνάρτηση που παίρνει ένα όρισμα και το διαιρεί με το μυστικό που περνάς στη secret_divide.
let divider = secret_divide(3)
divider(32)
// -> 10
Υλοποίησε τη secret_combine. Θα πρέπει να επιστρέφει μια συνάρτηση που παίρνει ένα όρισμα και του εφαρμόζει με τη σειρά τις δύο συναρτήσεις που περνάς στη secret_combine.
let multiply = secret_multiply(7)
let divide = secret_divide(3)
let combined = secret_combine(multiply, divide)
combined(6)
// -> 14
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Gleam με 33 έννοιες122 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.