A Gleamben a függvények első osztályú értékek, ami azt jelenti, hogy olyan értékek, mint bármely más: hozzárendelhetők változókhoz, argumentumként adhatók át, és más függvények visszaadhatják őket.
Egy modulban definiált nevesített függvényre a nevével hivatkozhatunk.
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
}
A Gleamben névtelen függvények is vannak, amelyeket más függvényeken belül definiálunk.
// Define the function
let f = fn(x) { x + 1 }
// Invoke the function
f(1) // -> 2
f(2) // -> 3
Egy függvény típusát a névtelen függvényekéhez hasonló szintaxissal adjuk meg. Egy olyan függvény típusát, amely egy Int-et és egy Float-ot kap, és egy Int-et ad vissza, így írjuk le:
fn(Int, Float) -> Int
A névtelen függvények hivatkozhatnak olyan változókra, amelyek a definiálásuk idején a scope-ban voltak, ezáltal closure-ökké válnak.
let secret_number = 42
// This function always returns 42
fn() { secret_number }
A function capture szintaxis kényelmes rövidítést kínál olyan névtelen függvények létrehozásához, amelyek egyetlen argumentumot adnak át egy függvénynek. Ez a két kifejezés egyenértékű:
// Anonymous function syntax
let f = fn(x) { my_function(1, 2, x) }
// Function capture syntax
let f = my_function(1, 2, _)
Ebben a feladatban egy titkosító eszköz szoftverét kell megírnod, amely az adatok átalakításával működik. Szükséged van egy módszerre, amellyel egyszerűbb függvények összekapcsolásával rugalmasan hozhatsz létre bonyolult függvényeket.
Minden részfeladatban adj vissza egy névtelen függvényt, amely a hívó scope-ból meghívható.
Valósítsd meg a secret_add függvényt. Olyan függvényt kell visszaadnia, amely egy argumentumot vár, és hozzáadja ahhoz a secret_add-nak átadott argumentumot.
let adder = secret_add(2)
adder(2)
// -> 4
Valósítsd meg a secret_subtract függvényt. Olyan függvényt kell visszaadnia, amely egy argumentumot vár, és kivonja abból a secret_subtract-nek átadott értéket.
let subtractor = secret_subtract(2)
subtractor(3)
// -> 1
Valósítsd meg a secret_multiply függvényt. Olyan függvényt kell visszaadnia, amely egy argumentumot vár, és megszorozza azt a secret_multiply-nek átadott értékkel.
let multiplier = secret_multiply(7)
multiplier(3)
// -> 21
Valósítsd meg a secret_divide függvényt. Olyan függvényt kell visszaadnia, amely egy argumentumot vár, és elosztja azt a secret_divide-nek átadott értékkel.
let divider = secret_divide(3)
divider(32)
// -> 10
Valósítsd meg a secret_combine függvényt. Olyan függvényt kell visszaadnia, amely egy argumentumot vár, és sorban alkalmazza rá a secret_combine-nak átadott két függvényt.
let multiply = secret_multiply(7)
let divide = secret_divide(3)
let combined = secret_combine(multiply, divide)
combined(6)
// -> 14
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Gleam nyelvet 33 fogalom122 feladat segítségével, valódi emberi mentorálással, mindez ingyen.