Kotlin Extensions Under the Hood – মজার ব্যাখ্যা!

 

🚀 Kotlin Extensions Under the Hood – মজার ব্যাখ্যা! 🎭

🔍 Kotlin Extension আসলে কী করছে?

আপনি যখন একটা ক্লাসের নতুন ফাংশন যোগ করছেন (Extension Function), তখন আসলে সেই ক্লাসের আসল কোড পরিবর্তন হয় না!
👉 বরং, একটা আলাদা ফাংশন তৈরি হয় যেটা আপনি মেথডের মতো কল করতে পারেন

📌 কিন্তু সাবধান!
🔸 এটা ক্লাসের প্রাইভেট (private) মেম্বার এক্সেস করতে পারে না!
🔸 এটা আসলে স্ট্যাটিক ফাংশন (Static Dispatch) হিসেবে কাজ করে!


🛠️ Extensions Static Dispatch মানে কী?

Extension Function রানটাইমে চেক করে না, বরং কম্পাইল টাইমেই ঠিক হয়ে যায়!
তাই সাবক্লাস থাকলেও, পারেন্ট ক্লাসের এক্সটেনশনই কল হবে!

💡 উদাহরণ দেখি:

open class Shape
class Rectangle: Shape()

fun Shape.getName() = "Shape"
fun Rectangle.getName() = "Rectangle"

fun printClassName(s: Shape) {
    println(s.getName())  // এখানে কোন getName() কল হবে?
}

fun main() {
    printClassName(Rectangle())  // Output: Shape ❌ (Rectangle নয়!)
}

🤯 কেন Output "Shape" আসলো, "Rectangle" না?

কারণ Extension Function আসলে ক্লাসের মেম্বার নয়!
👉 কম্পাইলার শুধুমাত্র এক্সপ্রেশনের টাইপ দেখে সিদ্ধান্ত নেয়!

🔍 printClassName(s: Shape)
📌 এখানে s এর টাইপ হলো Shape,
তাই Shape.getName() ফাংশনটাই কল হবে,
যদিও s আসলে Rectangle অবজেক্ট ধরে রাখছে! 🤯


🚀 যদি Virtual Dispatch হতো?

যদি এক্সটেনশন মেথড Virtual Dispatch ব্যবহার করতো, তাহলে রানটাইমে অবজেক্ট চেক করতো।
📌 মানে Rectangle() থাকলে, তার এক্সটেনশন কল করতো।

কিন্তু Kotlin-এ এটা হয় না!
🔹 কারণ Extensions আসলে স্ট্যাটিক ফাংশন, ক্লাসের মেম্বার নয়!


💡 তাহলে Extension Function কখন কাজে লাগবে?

✅ যখন আপনি বিদ্যমান ক্লাসে নতুন ফাংশন যোগ করতে চান, কিন্তু ক্লাস মডিফাই করতে পারবেন না!
✅ যখন আপনি চান নতুন মেথডের মতো কাজ করুক, কিন্তু ইনহেরিটেন্স ব্যবহার করতে না চান!


🔥 Kotlin Extensions – স্মার্ট টেকওয়ে!

🚀 এটা ক্লাস মডিফাই না করেও নতুন ফাংশন যোগ করার ম্যাজিক! 🎩
তবে এটা রানটাইমে চেক করে না, কম্পাইল টাইমেই ঠিক হয়ে যায়!
💡 ক্লাসের প্রাইভেট মেম্বার এক্সেস করতে পারে না!


এইভাবে, Kotlin Extensions সুপার পাওয়ার দেয়, কিন্তু সাবধানে ব্যবহার করতে হবে! 😉🔥

Comments

Popular posts from this blog

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

🧠 Regex কী?

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