Clojure এ Function Declaration: defn এবং Anonymous Functions (fn)
Clojure এ ফাংশন ডিক্লারেশন করার দুটি প্রধান পদ্ধতি আছে: defn এবং অজানা ফাংশন (Anonymous Functions), যা fn ব্যবহার করে তৈরি করা হয়। defn মূলত নামযুক্ত ফাংশন তৈরি করতে ব্যবহৃত হয়, যেখানে অজানা ফাংশনগুলি সাধারণত এককালীন বা কনটেক্সচুয়াল কাজে ব্যবহৃত হয়।
১. defn - Named Function Declaration
Clojure-এ defn কীওয়ার্ড ব্যবহার করে একটি নামযুক্ত ফাংশন ডিক্লারেশন করা যায়। এটি একটি পরিচিত পদ্ধতি, যেখানে ফাংশনের নাম এবং এর প্যারামিটারগুলি নির্ধারণ করা হয়।
defn এর সাধারণ সিনট্যাক্স
(defn function-name
"Optional docstring explaining the function"
[param1 param2 ...]
(expression-to-evaluate))- function-name: ফাংশনের নাম।
- docstring: ফাংশনটি কি কাজ করে তার একটি সংক্ষিপ্ত বিবরণ।
- [param1 param2 ...]: প্যারামিটার তালিকা।
- expression-to-evaluate: ফাংশনের কাজ বা কার্যপ্রণালি।
উদাহরণ
(defn যোগফল
"দুটি সংখ্যার যোগফল প্রদান করে"
[a b]
(+ a b))
(যোগফল ৫ ১০) ; আউটপুট: ১৫এখানে, যোগফল নামে একটি ফাংশন ডিক্লেয়ার করা হয়েছে যা দুইটি প্যারামিটার গ্রহণ করে এবং তাদের যোগফল প্রদান করে।
মাল্টি-আর্গুমেন্ট ফাংশন
Clojure এ defn ফাংশনে একাধিক প্যারামিটার ভ্যারিয়েন্ট যুক্ত করা যায়, যা বিভিন্ন সংখ্যক আর্গুমেন্ট গ্রহণ করতে পারে।
(defn যোগফল
([a] a)
([a b] (+ a b))
([a b c] (+ a b c)))
(যোগফল ১০) ; আউটপুট: ১০
(যোগফল ৫ ১৫) ; আউটপুট: ২০
(যোগফল ১ ২ ৩) ; আউটপুট: ৬এখানে, যোগফল ফাংশন বিভিন্ন সংখ্যক আর্গুমেন্ট গ্রহণ করতে সক্ষম।
২. Anonymous Functions (fn)
Anonymous Functions বা অজানা ফাংশনগুলি এককালীন কাজে ব্যবহৃত হয় এবং কোনো নির্দিষ্ট নাম থাকে না। সাধারণত সংক্ষিপ্ত ও কনটেক্সট-ভিত্তিক কাজের জন্য এই ফাংশনগুলি ব্যবহৃত হয়।
fn এর সাধারণ সিনট্যাক্স
(fn [param1 param2 ...]
(expression-to-evaluate))উদাহরণ
((fn [x y] (+ x y)) ১০ ২০) ; আউটপুট: ৩০এখানে (fn [x y] (+ x y)) একটি অজানা ফাংশন, যা দুইটি আর্গুমেন্টের যোগফল প্রদান করে এবং নাম ছাড়াই সরাসরি কল করা হয়েছে।
শর্টকাট সিনট্যাক্স #()
Clojure এ অজানা ফাংশনের জন্য শর্টকাট সিনট্যাক্স #() ব্যবহার করা যায়। এটি এক বা দুই লাইনের ফাংশনের জন্য সুবিধাজনক। # চিহ্ন দিয়ে শুরু করে প্যারামিটার % দিয়ে প্রকাশ করা হয়।
(#(+ %1 %2) ১০ ২০) ; আউটপুট: ৩০এখানে, %1 এবং %2 যথাক্রমে প্রথম এবং দ্বিতীয় আর্গুমেন্ট হিসেবে ব্যবহৃত হয়েছে।
আরও উদাহরণ: Anonymous Functions in Higher-Order Functions
Anonymous Functions সাধারণত map, filter, এবং reduce এর মতো হাই-অর্ডার ফাংশনগুলির সাথে ব্যবহৃত হয়।
(map (fn [x] (* x x)) [1 2 3 4]) ; আউটপুট: (1 4 9 16)
(map #(* % %) [1 2 3 4]) ; আউটপুট: (1 4 9 16)এখানে, একটি অজানা ফাংশন প্রতিটি উপাদানকে তার বর্গফল প্রদান করে।
সারসংক্ষেপ
defn: নামযুক্ত ফাংশন তৈরির জন্য ব্যবহৃত হয়, যেখানে ফাংশনের নাম এবং প্যারামিটার উল্লেখ করা হয়।- Anonymous Functions (
fn): এককালীন কাজের জন্য নামহীন ফাংশন ব্যবহৃত হয়, যা সরাসরি ব্যবহারযোগ্য। - শর্টকাট
#(): Anonymous Functions এর জন্য সংক্ষিপ্ত সিনট্যাক্স, যেখানে%চিহ্ন দিয়ে প্যারামিটার প্রকাশ করা হয়।
Clojure এ defn এবং Anonymous Functions এর মাধ্যমে প্রোগ্রামিং আরও সংক্ষিপ্ত এবং কার্যকর হয়।
Read more