Type Classes এবং Polymorphism

Type System in Haskell (টাইপ সিস্টেম) - হ্যাস্কেল (Haskell) - Computer Programming

306

Haskell এ Type Classes এবং Polymorphism

Type Classes এবং Polymorphism Haskell সহ অন্যান্য ফাংশনাল প্রোগ্রামিং ভাষায় একটি গুরুত্বপূর্ণ ধারণা, যা কোড পুনঃব্যবহারযোগ্যতা এবং নমনীয়তা বৃদ্ধি করে। এই দুটি বৈশিষ্ট্য কোডে উচ্চ মাত্রার সাধারণতা (generality) এবং টাইপ নিরাপত্তা (type safety) নিশ্চিত করতে সাহায্য করে।


1. Type Classes (টাইপ ক্লাস)

Type Class হ্যাসকেল এর একটি বিশেষ বৈশিষ্ট্য যা একটি ধরনের (type) জন্য সাধারণ আচরণ বা ইন্টারফেস নির্ধারণ করে। টাইপ ক্লাস একটি abstract interface এর মতো কাজ করে, যেখানে একটি টাইপ ক্লাসের মধ্যে একাধিক টাইপের জন্য একটি বা একাধিক ফাংশন ডিফাইন করা যেতে পারে। টাইপ ক্লাসগুলি এভাবে polymorphic functions তৈরি করতে সহায়ক, যার মাধ্যমে একই ফাংশন বিভিন্ন ধরনের ইনপুটের সাথে কাজ করতে পারে।

1.1. Type Class Declaration

টাইপ ক্লাসটি class কিওয়ার্ড দিয়ে ঘোষণা করা হয়, এবং এটি একটি টাইপ প্যারামিটার (যেমন a, b, ইত্যাদি) ব্যবহার করে যেটি বিভিন্ন ধরনের জন্য কাজ করতে পারে।

class Eq a where
  (==) :: a -> a -> Bool
  (/=) :: a -> a -> Bool

এখানে, Eq হল একটি টাইপ ক্লাস, যা তুলনা করার জন্য == এবং /= ফাংশন ডিফাইন করে। এই টাইপ ক্লাসে a একটি টাইপ প্যারামিটার, যা বিভিন্ন ধরনের মানের জন্য কাজ করতে পারে।

1.2. Type Class Instance

টাকা ক্লাসের একটি ইনস্ট্যান্স হলো একটি টাইপের বাস্তবায়ন যা টাইপ ক্লাসের নির্ধারিত ফাংশনগুলির জন্য কাজ করে। উদাহরণস্বরূপ, Eq টাইপ ক্লাসের একটি ইনস্ট্যান্সের মাধ্যমে আপনি একটি নির্দিষ্ট টাইপের জন্য == এবং /= ফাংশন সংজ্ঞায়িত করতে পারেন।

instance Eq Int where
  x == y = x `Prelude.eq` y
  x /= y = not (x == y)

এখানে, Eq টাইপ ক্লাসের একটি ইনস্ট্যান্স তৈরি করা হয়েছে যা Int টাইপের জন্য কাজ করে। অর্থাৎ, এই টাইপের মানের মধ্যে সমতা যাচাই করা যাবে।

1.3. Type Class Example

এখন, আপনি Eq টাইপ ক্লাসের মাধ্যমে দুটি ভিন্ন টাইপের মানের মধ্যে সমতা যাচাই করতে পারবেন:

main :: IO ()
main = do
  print (5 == 5)     -- True
  print (5 == 10)    -- False
  print ("hello" == "hello")  -- True

এখানে, == ফাংশনটি Int এবং String টাইপের জন্য কাজ করছে, যেহেতু Int এবং String যথাক্রমে Eq টাইপ ক্লাসের ইনস্ট্যান্স।


2. Polymorphism (পলিমর্ফিজম)

Polymorphism (পলিমর্ফিজম) হল একটি ধারণা যেখানে একই ফাংশন বা অপারেশন বিভিন্ন ধরনের ডেটার উপর কাজ করতে পারে। এটি দুটি ধরণের হতে পারে:

  • Parametric Polymorphism: যখন একটি ফাংশন বা টাইপ কোনো নির্দিষ্ট টাইপের উপর নির্ভর করে না এবং এটি যেকোনো টাইপের জন্য কাজ করতে পারে।
  • Ad-hoc Polymorphism: যখন একটি ফাংশন বা অপারেশন একাধিক টাইপের জন্য বিশেষভাবে সংজ্ঞায়িত হয়।

2.1. Parametric Polymorphism

Parametric Polymorphism হল একটি ফাংশন বা টাইপের ক্ষমতা যার মাধ্যমে একটি ফাংশন যে কোন টাইপের উপর কাজ করতে পারে। এটি হ্যাসকেলে type variables (টাইপ ভেরিয়েবল) ব্যবহার করে অর্জন করা হয়।

-- Generic function for identity
identity :: a -> a
identity x = x

এখানে, identity ফাংশনটি parametric polymorphism ব্যবহার করে, এবং এটি যেকোনো টাইপের ইনপুট নিতে পারে। a এখানে একটি টাইপ ভেরিয়েবল, যা যেকোনো টাইপ হতে পারে।

2.2. Ad-hoc Polymorphism

Ad-hoc Polymorphism হল একটি প্রকারের polymorphism যেখানে একাধিক টাইপের জন্য আলাদা আচরণ বা কার্যকলাপ নির্ধারণ করা হয়। এটি সাধারণত type classes এর মাধ্যমে প্রয়োগ করা হয়।

-- Type class Eq for equality comparison
class Eq a where
  (==) :: a -> a -> Bool
  (/=) :: a -> a -> Bool

-- Instance of Eq for Int
instance Eq Int where
  x == y = x `Prelude.eq` y
  x /= y = not (x == y)

-- Instance of Eq for String
instance Eq String where
  x == y = x == y
  x /= y = not (x == y)

এখানে, Eq টাইপ ক্লাসটি Int এবং String এর জন্য আলাদা আলাদা ইনস্ট্যান্স সংজ্ঞায়িত করেছে, যেগুলি তাদের নিজস্ব কার্যকলাপ অনুযায়ী কাজ করে। এটি ad-hoc polymorphism এর উদাহরণ, যেখানে বিভিন্ন টাইপের জন্য আলাদা আলাদা আচরণ তৈরি করা হয়।

2.3. Polymorphic Functions with Type Classes

Haskell এ একটি ফাংশন সাধারণভাবে পলিমরফিক হতে পারে যদি এটি টাইপ ক্লাসের প্যারামিটার নিয়ে কাজ করে। উদাহরণস্বরূপ, আমরা একটি ফাংশন তৈরি করতে পারি যা দুইটি Eq টাইপের মানের সমতা যাচাই করে, যা Int, String এবং অন্যান্য যেকোনো টাইপের জন্য কাজ করতে পারে:

areEqual :: Eq a => a -> a -> Bool
areEqual x y = x == y

এখানে, areEqual একটি পলিমরফিক ফাংশন যা যেকোনো টাইপের Eq ক্লাসের ইনস্ট্যান্স গ্রহণ করে এবং তাদের মধ্যে সমতা পরীক্ষা করে। এটি parametric polymorphism এর উদাহরণ, কারণ এটি যেকোনো Eq টাইপের মানের সাথে কাজ করতে পারে।


3. Polymorphism এবং Type Classes এর গুরুত্ব

  • Code Reusability: টাইপ ক্লাস এবং পলিমরফিজমের মাধ্যমে কোড পুনঃব্যবহারযোগ্য করা যায়, কারণ একই ফাংশন বা অপারেশন বিভিন্ন ধরনের ডেটার উপর কাজ করতে পারে।
  • Type Safety: টাইপ ক্লাসগুলি টাইপ নিরাপত্তা নিশ্চিত করে, কারণ এটি নিশ্চিত করে যে একটি ফাংশন শুধুমাত্র সেই টাইপের জন্য কাজ করবে যা নির্দিষ্ট করা হয়েছে।
  • Code Abstraction: টাইপ ক্লাস এবং পলিমরফিজম কোডের বিমূর্ততা বৃদ্ধি করে, কারণ কোডের কার্যকলাপ এবং উদ্দেশ্য আরো পরিষ্কারভাবে সংজ্ঞায়িত করা যায়।

উপসংহার

Type Classes এবং Polymorphism হ্যাসকেলের মৌলিক বৈশিষ্ট্যগুলির মধ্যে অন্যতম। Type classes একটি টাইপের জন্য সাধারণ আচরণ বা ইন্টারফেস নির্ধারণ করে, যার মাধ্যমে বিভিন্ন টাইপের জন্য নির্দিষ্ট ফাংশন কার্যকরী করা যায়। Polymorphism ফাংশন বা অপারেশনকে বিভিন্ন টাইপের জন্য কাজ করার ক্ষমতা প্রদান করে। এই বৈশিষ্ট্যগুলি কোডকে আরও সৃজনশীল, পুনঃব্যবহারযোগ্য এবং টাইপ নিরাপদ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...