Property Delegation (lazy, observable)
কটলিনে Property Delegation একটি শক্তিশালী ফিচার যা প্রোপার্টি সংক্রান্ত কার্যকারিতা সহজতর করে। এটি সাধারণত একটি প্রোপার্টির জন্য নির্দিষ্ট আচরণ কাস্টমাইজ করার জন্য ব্যবহৃত হয়, যেমন প্রোপার্টির মান লেজি লোডিং করা বা অবজারভেবল আচরণ তৈরি করা। কটলিনের দুইটি জনপ্রিয় ডেলিগেট হলো: lazy এবং observable।
১. Lazy Delegation
Lazy Delegation ব্যবহার করে একটি প্রোপার্টির মান তখনই তৈরি হয় যখন এটি প্রথমবারের জন্য ব্যবহৃত হয়। এটি মেমোরি ব্যবহারের কার্যকারিতা বাড়ায় এবং ডেটা তৈরির সময়কে বিলম্বিত করে।
উদাহরণ:
class User {
val name: String by lazy {
println("Calculating name...")
"Alice"
}
}
fun main() {
val user = User()
println("User created.") // আউটপুট: User created.
println(user.name) // আউটপুট: Calculating name... \n Alice
}
ব্যাখ্যা:
- এখানে
nameপ্রোপার্টির মান প্রথমবার ব্যবহার করার সময় তৈরি হচ্ছে, অর্থাৎ যখনuser.nameপ্রথমবার কল করা হয়। lazyডেলিগেট ব্যবহার করে এটি নিশ্চিত করে যে"Calculating name..."কেবল একবারই প্রিন্ট হবে।
Lazy Delegation এর ব্যবহার:
- এটি সাধারণত সস্তা অথবা জটিল কাজের জন্য ব্যবহৃত হয় যা কখনও কখনও সম্পন্ন হতে পারে।
- এটি প্রোপার্টির প্রথম ব্যবহারের সময় সম্পন্ন হয়, এবং পরবর্তীতে সেটি ক্যাশে করা হয়।
২. Observable Delegation
Observable Delegation ব্যবহার করে একটি প্রোপার্টির মান পরিবর্তন হলে নির্দিষ্ট অ্যাকশান (অর্থাৎ, কলব্যাক) কার্যকর করা যায়। এটি ObservableProperty ইন্টারফেস ব্যবহার করে। এটি সাধারণত UI এ পরিবর্তন দেখানোর জন্য ব্যবহৃত হয়।
উদাহরণ:
import kotlin.properties.Delegates
class User {
var name: String by Delegates.observable("<no name>") { prop, old, new ->
println("Name changed from $old to $new")
}
}
fun main() {
val user = User()
println(user.name) // আউটপুট: <no name>
user.name = "Alice" // আউটপুট: Name changed from <no name> to Alice
user.name = "Bob" // আউটপুট: Name changed from Alice to Bob
}
ব্যাখ্যা:
- এখানে
nameপ্রোপার্টিDelegates.observableদ্বারা ডেলিগেট করা হয়েছে। - যখন
nameএর মান পরিবর্তিত হয়, তখন দ্বিতীয় প্যারামিটারoldএবং তৃতীয় প্যারামিটারnewব্যবহার করে পরিবর্তনের তথ্য প্রিন্ট করা হয়।
Observable Delegation এর ব্যবহার:
- এটি অবজারভেবল স্টেট ম্যানেজমেন্টের জন্য খুবই কার্যকর, যেমন UI ফ্রেমওয়ার্কে বা কাস্টম ডেটা মডেল তৈরিতে।
- প্রোপার্টির মান পরিবর্তন হলে আপনি সহজেই কার্যকরী আচরণ লিখতে পারেন।
উপসংহার
কটলিনে Property Delegation ব্যবহার করে আপনি প্রোপার্টির আচরণ কাস্টমাইজ করতে পারেন। Lazy Delegation প্রোপার্টির মান বিলম্বিতভাবে লোড করতে এবং Observable Delegation প্রোপার্টির মান পরিবর্তনের সময় একটি নির্দিষ্ট অ্যাকশান কার্যকর করতে সাহায্য করে। এই ফিচারগুলো কোডকে আরও পরিষ্কার, কার্যকর এবং পুনঃব্যবহারযোগ্য করে তোলে।
Read more