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
Post a Comment