Haskell এ Functions এর ডিক্লারেশন এবং সংজ্ঞা
Haskell এ ফাংশন ডিক্লারেশন এবং সংজ্ঞা অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ফাংশনাল প্রোগ্রামিং ভাষা এবং ফাংশন ব্যবহার করেই বেশিরভাগ কাজ করা হয়। Haskell এ একটি ফাংশন সাধারণত দুই ধাপে সংজ্ঞায়িত করা হয়:
- টাইপ ডিক্লারেশন: ফাংশনের ইনপুট এবং আউটপুটের টাইপ নির্ধারণ করা হয়।
- ফাংশন সংজ্ঞা (Definition): ফাংশনের মূল কাজ, অর্থাৎ ফাংশনের লজিক বা বডি লেখা হয়।
1. টাইপ ডিক্লারেশন
প্রথমেই ফাংশনের টাইপ ডিক্লারেশন লেখা হয়। টাইপ ডিক্লারেশন ফাংশনের নাম এবং তার ইনপুট ও আউটপুট টাইপ নির্ধারণ করে। Haskell এর টাইপ সিস্টেম শক্তিশালী এবং স্ট্যাটিক, যা কোডকে নির্ভুল ও নির্ভরযোগ্য করে তোলে।
টাইপ ডিক্লারেশন এর সাধারণ গঠন:
functionName :: Type1 -> Type2 -> ... -> ReturnTypeযেখানে,
functionNameহলো ফাংশনের নাম,Type1,Type2, ইত্যাদি ইনপুট টাইপ এবংReturnTypeফাংশনের আউটপুট টাইপ নির্দেশ করে।
উদাহরণস্বরূপ, দুটি পূর্ণসংখ্যা যোগ করার জন্য একটি ফাংশনের টাইপ ডিক্লারেশন:
add :: Int -> Int -> Intএখানে add ফাংশনটি দুটি Int ইনপুট নিয়ে একটি Int আউটপুট দেবে।
2. ফাংশন সংজ্ঞা (Definition)
টাইপ ডিক্লারেশনের পরে, ফাংশনের সংজ্ঞা দেওয়া হয়, যেখানে ফাংশনের কাজ সম্পাদনের জন্য লজিক লেখা হয়।
ফাংশন সংজ্ঞার সাধারণ গঠন:
functionName parameter1 parameter2 = expressionউদাহরণস্বরূপ, add ফাংশনের জন্য সংজ্ঞা:
add x y = x + yএখানে,
xএবংyইনপুট প্যারামিটার হিসেবে ব্যবহৃত হয়েছে,x + yফাংশনের কাজ সম্পাদনের জন্য ব্যবহৃত এক্সপ্রেশন।
উদাহরণ ১: সাধারণ ফাংশন
দুটি সংখ্যার যোগফল বের করার জন্য একটি সাধারণ ফাংশন:
add :: Int -> Int -> Int
add x y = x + yএখানে add ফাংশনটি দুটি Int ইনপুট x এবং y নেয় এবং তাদের যোগফল প্রদান করে।
উদাহরণ ২: ফ্যাক্টোরিয়াল ফাংশন (Recursion ব্যবহার করে)
একটি সংখ্যার ফ্যাক্টোরিয়াল বের করার জন্য factorial নামে একটি ফাংশন:
factorial :: Int -> Int
factorial 0 = 1
factorial n = n * factorial (n - 1)এখানে factorial একটি রেকারসিভ ফাংশন, যা n = 0 হলে 1 রিটার্ন করে এবং অন্যথায় n * factorial (n - 1) হিসাব করে।
উদাহরণ ৩: গার্ড ব্যবহার করে ফাংশন সংজ্ঞা
গার্ড ব্যবহার করে শর্ত অনুযায়ী আউটপুট নির্ধারণ করা যায়। নিচে একটি absolute ফাংশনের উদাহরণ দেওয়া হলো, যা কোন সংখ্যার মান ধনাত্মক হিসেবে প্রদান করে:
absolute :: Int -> Int
absolute x
| x < 0 = -x
| otherwise = xএখানে,
absoluteফাংশনটিxমান নেয়,- যদি
x < 0হয়, তাহলে-xরিটার্ন করে, অন্যথায়xরিটার্ন করে।
উদাহরণ ৪: প্যাটার্ন ম্যাচিং ব্যবহার করে ফাংশন
প্যাটার্ন ম্যাচিং ব্যবহার করে বিভিন্ন ইনপুট অনুযায়ী ভিন্ন আউটপুট নির্ধারণ করা যায়। যেমন, একটি describe ফাংশন যা সংখ্যা অনুযায়ী টেক্সট আউটপুট দেয়:
describe :: Int -> String
describe 0 = "Zero"
describe 1 = "One"
describe _ = "Other number"এখানে describe ফাংশনটি 0, 1, এবং অন্যান্য সংখ্যার জন্য বিভিন্ন আউটপুট প্রদান করে।
উদাহরণ ৫: ল্যাম্বডা ফাংশন (Lambda Function)
Haskell এ অস্থায়ী বা এককালীন ফাংশন তৈরির জন্য ল্যাম্বডা এক্সপ্রেশন ব্যবহার করা যায়। এটি সাধারণত \ চিহ্ন দিয়ে শুরু হয় এবং এই ফাংশনগুলো একবারের জন্য ব্যবহৃত হয়।
multiplyByTwo = \x -> x * 2এখানে multiplyByTwo একটি ল্যাম্বডা ফাংশন যা x ইনপুটকে x * 2 হিসেবে গণনা করে।
সম্পূর্ণ উদাহরণ
নিচের কোডটি বিভিন্ন ফাংশন সংজ্ঞা এবং তাদের কাজ দেখায়:
-- টাইপ ডিক্লারেশন সহ একটি যোগফল ফাংশন
add :: Int -> Int -> Int
add x y = x + y
-- রেকারসিভ ফ্যাক্টোরিয়াল ফাংশন
factorial :: Int -> Int
factorial 0 = 1
factorial n = n * factorial (n - 1)
-- গার্ড ব্যবহার করে অ্যাবসোলুট ভ্যালু ফাংশন
absolute :: Int -> Int
absolute x
| x < 0 = -x
| otherwise = x
-- প্যাটার্ন ম্যাচিং ব্যবহার করে সংখ্যা বর্ণনা ফাংশন
describe :: Int -> String
describe 0 = "Zero"
describe 1 = "One"
describe _ = "Other number"
-- মেইন ফাংশন
main :: IO ()
main = do
print (add 5 3) -- আউটপুট: 8
print (factorial 5) -- আউটপুট: 120
print (absolute (-10)) -- আউটপুট: 10
print (describe 1) -- আউটপুট: "One"
print (describe 7) -- আউটপুট: "Other number"এই প্রোগ্রামে:
addফাংশন দুটি সংখ্যার যোগফল প্রদান করে।factorialফাংশন একটি সংখ্যার ফ্যাক্টোরিয়াল গণনা করে।absoluteফাংশন একটি সংখ্যার ধনাত্মক মান প্রদান করে।describeফাংশন ইনপুট অনুযায়ী টেক্সট রিটার্ন করে।
উপসংহার
Haskell এ ফাংশন ডিক্লারেশন এবং সংজ্ঞা খুবই সরল এবং শক্তিশালী, যা কোডের নিরাপত্তা ও নির্ভরযোগ্যতা বৃদ্ধি করে। টাইপ ডিক্লারেশন, প্যাটার্ন ম্যাচিং, গার্ড এবং ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে প্রোগ্রামাররা সহজেই ফাংশন তৈরি করতে এবং কার্যকরী কোড লিখতে পারেন।
Read more