Sealed Class এবং Exhaustion সম্পর্কে ব্যাখ্যা

 Sealed Class এবং Exhaustion সম্পর্কে ব্যাখ্যা (বাংলায়)

ধরুন, আপনার কাছে একটি MyPet নামে একটি ডোমেইন (ক্লাস) আছে যেখানে কেবলমাত্র দুটি নির্দিষ্ট পোষা প্রাণী আছে—একটি বিড়াল Meowsi এবং একটি কুকুর Fido

এখন, যদি আমরা sealed class ব্যবহার করি, তাহলে কোডটি হবে:

sealed class MyPet
class Meowsi : MyPet()
class Fido : MyPet()

fun feed(myPet: MyPet): String {
    return when(myPet) {
       is Meowsi -> "Giving cat food to Meowsi!"
       is Fido -> "Giving dog biscuit to Fido!" 
    }
}

এখানে, যেহেতু MyPet হলো sealed class, তাই when expression নিশ্চিতভাবেই জানে যে MyPet-এর মাত্র দুটি subclass (Meowsi এবং Fido) আছে। তাই else statement দরকার নেই, কারণ সকল সম্ভাবনা exhausted হয়ে গেছে।

সমস্যা যখন sealed class ব্যবহার করা হয় না

এখন, যদি sealed class না ব্যবহার করে open class ব্যবহার করি, তাহলে কোড হবে:

open class MyPet
class Meowsi : MyPet()
class Fido : MyPet()

fun feed(myPet: MyPet): String {
    return when(myPet) {
       is Meowsi -> "Giving cat food to Meowsi!"
       is Fido -> "Giving dog biscuit to Fido!" 
       else -> "Giving food to someone else!" // else statement বাধ্যতামূলক
    }
}

এখানে else statement বাধ্যতামূলক, কারণ MyPet-এর নতুন subclass তৈরি হতে পারে। যদি কেউ MyPet থেকে নতুন TweetiePie নামে একটি subclass তৈরি করে, তাহলে সেইটিও else case-এ চলে যাবে

class TweetiePie : MyPet() // নতুন পোষা প্রাণী (একটি পাখি)

এখন, যখন feed() ফাংশন চালানো হবে, তখন TweetiePie-কেও else case অনুযায়ী খাবার দেওয়া হবে, যা অপ্রত্যাশিত হতে পারে।

Sealed Class কেন দরকার?

  1. নিশ্চিত করে যে সব subclass জানা আছে

    • Sealed class ব্যবহার করলে নতুন subclass বাইরে থেকে তৈরি করা যাবে না, তাই when expression সব subclass সম্পর্কে নিশ্চিত থাকে।
  2. Bug কমায় ও নির্দিষ্ট states বজায় রাখে

    • নতুন কোনো subclass আসবে না বলে প্রোগ্রামের states কমে যায়, যা bug কমাতে সাহায্য করে।
  3. else statement-এর প্রয়োজন হয় না

    • যেহেতু sealed class-এর সব subclass জানা আছে, তাই else block লাগবে না, যা কোডকে সহজ ও নিরাপদ করে

Java enum দিয়ে কি করা যেত?

Java-তে enum ব্যবহার করে কিছুটা একই কাজ করা যেত, তবে enum হলো pure class নয়, অর্থাৎ subclass তৈরি করা যায় না। কিন্তু sealed class-এ subclass ব্যবহার করা যায়, তাই এটি বেশি Flexible

উদাহরণ হিসেবে বাজেট কন্ট্রোল

যদি আপনার বাজেট সীমিত থাকে এবং আপনি শুধুমাত্র Meowsi ও Fido-কে খাবার দিতে চান, তাহলে sealed class ব্যবহার করে নিশ্চিত করতে পারেন যে অযাচিত প্রাণীদের খাবার দেওয়া হবে না

অন্যদিকে, sealed class ছাড়া open class ব্যবহার করলে কেউ TweetiePie নামে একটি subclass তৈরি করে অযাচিতভাবে খাবার পেয়ে যেতে পারে

সারসংক্ষেপ

  • sealed class ব্যবহার করলে প্রোগ্রাম নির্দিষ্ট subclass-এর মধ্যেই সীমাবদ্ধ থাকে।
  • Bug কমে, কারণ নতুন অপ্রত্যাশিত subclass তৈরি হয়ে ভুলভাবে কাজ করবে না।
  • else statement দরকার হয় না, যা কোডকে সহজ এবং নিরাপদ করে।
  • যদি open class ব্যবহার করেন, তাহলে নতুন subclass তৈরি হলে else case দিয়ে সেটাকে ধরতে হবে, যা অনিচ্ছাকৃত ফলাফল আনতে পারে।

এই কারণে sealed class অনেক ক্ষেত্রে গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি নিশ্চিত করতে চান যে কোনো নতুন subclass তৈরি হয়ে আচরণ পরিবর্তন করবে না। 🚀

Comments

Popular posts from this blog

AI (Artificial Intelligence) সহজভাবে বোঝার জন্য একদম মস্তিষ্ক-বান্ধব ব্যাখ্যা 🧠🤖

🧠 Regex কী?

Kotlin-এ ভেরিয়েবল ঘোষণা করার দুই উপায়