Extension Functions এবং Properties
কটলিনের Extension Functions এবং Extension Properties একটি ক্লাসের ফাংশন বা প্রপার্টি হিসেবে নতুন আচরণ যুক্ত করার সুবিধা দেয়। এই ফিচারগুলো কোডকে আরও পরিষ্কার, সংক্ষিপ্ত এবং পুনঃব্যবহারযোগ্য করে তোলে। নিচে বিস্তারিতভাবে আলোচনা করা হলো।
১. Extension Functions
Extension Functions কটলিনের একটি বৈশিষ্ট্য যা বিদ্যমান ক্লাসে নতুন ফাংশন যোগ করার অনুমতি দেয়। এটি ক্লাসের অবজেক্ট তৈরি না করেও তাদের উপর ফাংশন কার্যকর করার সুবিধা দেয়।
Syntax:
kotlin
Copy code
fun ClassName.functionName(parameters): ReturnType {
// Function body
}
উদাহরণ:
fun String.reverse(): String {
return this.reversed() // this নির্দেশ করে বর্তমান অবজেক্ট
}
fun main() {
val original = "Kotlin"
val reversed = original.reverse()
println(reversed) // আউটপুট: niltoK
}
ব্যাখ্যা:
- এখানে
Stringক্লাসেreverseনামক একটি extension function তৈরি করা হয়েছে যা একটি স্ট্রিংয়ের অক্ষরগুলোকে বিপরীত করে দেয়। thisকিওয়ার্ডটি বর্তমান অবজেক্টকে নির্দেশ করে।
২. Extension Properties
Extension Properties ক্লাসের নতুন প্রপার্টি যোগ করার একটি উপায়, যদিও এর মান ভ্যালু ধারন করার জন্য কোন ব্যাকিং ফিল্ড নেই। এটি সাধারণত একটি ফাংশনের মাধ্যমে মান প্রদান করে।
Syntax:
val ClassName.propertyName: ReturnType
get() = // Return expression
উদাহরণ:
val String.lastChar: Char
get() = this[this.length - 1]
fun main() {
val str = "Kotlin"
println("The last character is: ${str.lastChar}") // আউটপুট: The last character is: n
}
ব্যাখ্যা:
- এখানে
lastCharনামক একটি extension property তৈরি করা হয়েছে, যাStringক্লাসের শেষ অক্ষর রিটার্ন করে।
৩. Benefits of Extension Functions and Properties
- Readability: কোড পড়তে সহজ হয় কারণ আপনি ক্লাসের প্রকৃত সংজ্ঞা পরিবর্তন না করে নতুন ফাংশন বা প্রপার্টি যোগ করতে পারেন।
- Reusability: একাধিক ক্লাসে একই extension function ব্যবহার করা যায়।
- Separation of Concerns: আলাদা ফাংশনালিটি সংযুক্ত করা যায় যা মূল ক্লাসের সাথে সম্পর্কিত নয়।
৪. Limitations
- Cannot Override: Extension functions এবং properties বিদ্যমান ক্লাসের মেথডগুলোকে ওভাররাইড করতে পারে না।
- Static Resolution: কটলিনে extension functions compile-time এ নির্ধারিত হয়, তাই এটি প্রকৃত অবজেক্টের টাইপের উপর ভিত্তি করে কাজ করে।
৫. Example with Multiple Classes
Extension functions এবং properties একাধিক ক্লাসের জন্যও তৈরি করা যেতে পারে।
fun List<Int>.sum(): Int {
return this.fold(0) { acc, number -> acc + number }
}
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
println("Sum of numbers: ${numbers.sum()}") // আউটপুট: Sum of numbers: 15
}
ব্যাখ্যা:
- এখানে
List<Int>ক্লাসেsumextension function তৈরি করা হয়েছে, যা একটি লিস্টের সব সংখ্যার যোগফল বের করে।
উপসংহার
Extension Functions এবং Extension Properties কটলিনের একটি শক্তিশালী বৈশিষ্ট্য, যা বিদ্যমান ক্লাসে নতুন ফাংশনালিটি যুক্ত করে। এটি কোডকে আরও পরিষ্কার এবং পুনঃব্যবহারযোগ্য করে তোলে। আপনি যখন চাইবেন একটি ক্লাসের কার্যকারিতা বাড়াতে, তখন এই ফিচারগুলো ব্যবহারে আপনি লাভবান হতে পারেন।
Read more