Elixir: Named এবং Anonymous Functions
Elixir এ Named Functions এবং Anonymous Functions দুটি গুরুত্বপূর্ণ কনসেপ্ট যা কোডের কার্যকারিতা এবং নমনীয়তা বৃদ্ধি করে। এই ফাংশনগুলো ফাংশনাল প্রোগ্রামিং ভাষার অন্যতম বৈশিষ্ট্য এবং এগুলোর মধ্যে পার্থক্য এবং ব্যবহারিক দিক থেকে কিছু গুরুত্বপূর্ণ মৌলিক বিষয় রয়েছে।
1. Named Functions
Named Functions হল এমন ফাংশন যা একটি নির্দিষ্ট নাম দিয়ে ঘোষণা করা হয় এবং পরে সেই নাম ব্যবহার করে ফাংশনটি কল করা হয়। Named functions সাধারণত modules (মডিউল) এর মধ্যে থাকে এবং এগুলি কোডের পুনঃব্যবহারযোগ্যতা এবং সংগঠনের জন্য ব্যবহার করা হয়।
Named Function এর সিনট্যাক্স:
ডিফাইনেশন:
defmodule MyModule do def greet(name) do IO.puts("Hello, #{name}!") end endফাংশন কল:
MyModule.greet("Alice")
এখানে, greet নামক একটি ফাংশন MyModule মডিউলের মধ্যে ডিফাইন করা হয়েছে, এবং এটি Alice ইনপুট প্যারামিটার সহ কল করা হয়েছে।
Named Functions এর কিছু বৈশিষ্ট্য:
- ফাংশন নেম স্পেসিফিক: মডিউলের মধ্যে নাম দিয়ে ফাংশন কল করা হয়।
- পুনঃব্যবহারযোগ্য: একাধিক জায়গায় একই ফাংশন ব্যবহার করা যায়।
- সহজ ট্র্যাকিং: ফাংশনগুলোর নাম থাকে, ফলে কোড পড়া এবং ডিবাগিং সহজ হয়।
- প্যাটার্ন ম্যাচিং: Elixir তে named functions প্যাটার্ন ম্যাচিং সমর্থন করে, যার মাধ্যমে একাধিক ইনপুট প্যারামিটার দ্বারা ফাংশন ডিফাইন করা যায়।
উদাহরণ:
defmodule Math do
def add(a, b) do
a + b
end
end
IO.puts(Math.add(5, 3)) # আউটপুট হবে 82. Anonymous Functions
Anonymous Functions (অজ্ঞাত ফাংশন) এমন ফাংশন যা কোনো নাম ছাড়াই ডিফাইন করা হয়। এগুলি সাধারণত একক ব্যবহারের জন্য হয় এবং কখনো কখনো ভেরিয়েবলের মধ্যে সংরক্ষিত হয়। এগুলি fn কিওয়ার্ড দিয়ে ডিফাইন করা হয় এবং সাধারণত first-class citizens হিসেবে ব্যবহৃত হয়।
Anonymous Function এর সিনট্যাক্স:
ডিফাইনেশন:
add = fn a, b -> a + b endফাংশন কল:
IO.puts(add.(5, 3)) # আউটপুট হবে 8
এখানে, add একটি অজ্ঞাত ফাংশন হিসেবে ডিফাইন করা হয়েছে, এবং তা দুইটি ইনপুট প্যারামিটার নিয়ে গুণফল প্রদান করছে। ফাংশনটিকে add.(5, 3) এর মাধ্যমে কল করা হয়েছে।
Anonymous Functions এর কিছু বৈশিষ্ট্য:
- ফাংশনের নাম নেই: এটি কোনো নামের অধীনে থাকে না, তবে সাধারণত একটি ভেরিয়েবলে সংরক্ষণ করা হয়।
- এককালীন ব্যবহার: এটি সাধারণত এককালীন ব্যবহার হয় অথবা একটি ভেরিয়েবলে অ্যাসাইন করা হয়।
- লাভজনক প্যারামিটার: এক্সপ্রেশন বা ফাংশনগুলো অন্য ফাংশনের আর্গুমেন্ট হিসেবে পাস করা যায়।
- শর্টকাট সিমেন্ট: Elixir তে & অপারেটর ব্যবহার করে অজ্ঞাত ফাংশনগুলোকে আরো সংক্ষিপ্তভাবে লেখা যায়।
Anonymous Functions এর উদাহরণ:
add = fn a, b -> a + b end
subtract = fn a, b -> a - b end
IO.puts(add.(5, 3)) # আউটপুট হবে 8
IO.puts(subtract.(5, 3)) # আউটপুট হবে 2এখানে, দুটি অজ্ঞাত ফাংশন add এবং subtract ডিফাইন করা হয়েছে এবং সেগুলি পরবর্তীতে কল করা হয়েছে।
Anonymous Function এর সংক্ষিপ্ত ব্যবহার (Shorthand):
Elixir তে & অপারেটর ব্যবহার করে আপনি অজ্ঞাত ফাংশনগুলো আরও সংক্ষিপ্তভাবে লিখতে পারেন। এটি ফাংশন সংজ্ঞায় ফাংশনের আর্গুমেন্টগুলোর জন্য স্বয়ংক্রিয়ভাবে ইনডেক্স প্রদান করে।
add = &(&1 + &2) # &1 এবং &2 আর্গুমেন্ট হিসেবে কাজ করছে
IO.puts(add.(5, 3)) # আউটপুট হবে 8এখানে, &(&1 + &2) শর্টকাট ব্যবহার করে দুটি আর্গুমেন্টের যোগফল বের করা হয়েছে।
Named Functions এবং Anonymous Functions এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Named Functions | Anonymous Functions |
|---|---|---|
| নাম | একটি নির্দিষ্ট নাম থাকে। | কোনো নাম থাকে না। |
| ব্যবহার | কোড পুনঃব্যবহারের জন্য এবং মডিউলের মধ্যে থাকে। | এককালীন ব্যবহারের জন্য, ভেরিয়েবলে সংরক্ষিত হয়। |
| প্যাটার্ন ম্যাচিং | প্যাটার্ন ম্যাচিং সমর্থন করে। | প্যাটার্ন ম্যাচিং সাধারণত সমর্থন করে না। |
| সংগঠন | সাধারণত মডিউলের মধ্যে থাকে। | সাধারণত একক লাইনে সংজ্ঞায়িত হয়। |
| ফাংশন কল | MyModule.function_name(arg) | function.(arg) |
সারসংক্ষেপ
- Named Functions: এগুলি ফাংশনের নাম দিয়ে ডিফাইন করা হয় এবং কোডের পুনঃব্যবহারযোগ্যতা, মডুলারাইজেশন এবং প্যাটার্ন ম্যাচিংয়ের জন্য ব্যবহৃত হয়।
- Anonymous Functions: এগুলি কোনো নাম ছাড়াই ব্যবহৃত হয় এবং সাধারণত এককালীন ব্যবহার অথবা ভেরিয়েবলে সংরক্ষিত হয়। এগুলি কোডে আরও নমনীয়তা এনে দেয় এবং অন্যান্য ফাংশনে আর্গুমেন্ট হিসেবে পাস করা যায়।
এভাবে Elixir তে Named Functions এবং Anonymous Functions এর ব্যবহার কোডিংয়ের উন্নত কৌশল ও কার্যকারিতা প্রদান করে।
Read more