Gleam में फर्स्ट क्लास फंक्शन होते हैं। इसका मतलब है कि फंक्शन भी सामान्य वैल्यू की तरह होते हैं, जिन्हें वेरिएबल में असाइन किया जा सकता है, आर्गुमेंट के रूप में भेजा जा सकता है, और दूसरे फंक्शन से लौटाया जा सकता है।
किसी मॉड्यूल में बनाए गए नाम वाले फंक्शन को उसके नाम से इस्तेमाल किया जा सकता है।
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 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।