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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।