ওভারভিউ
কোটলিন লাইব্রেরি প্রপার্টি ঘোষণার জন্য দুটি ভিন্ন অ্যাক্সেস মডিফায়ার প্রদান করে। এই নিবন্ধে, আমরা এই দুটি অ্যাক্সেস মডিফায়ারের পার্থক্য এবং কিভাবে আমরা সেগুলো অ্যাপ্লিকেশনে ব্যবহার করতে পারি তা হাইলাইট করব।
Lateinit
"lateInit" ভেরিয়েবল তৈরি করতে, আমাদের শুধু সেই ভেরিয়েবলের অ্যাক্সেস মডিফায়ার হিসেবে "lateInit" কীওয়ার্ডটি যোগ করতে হবে। কোটলিনে "lateInit" ব্যবহার করার জন্য নিচের শর্তাবলী মেনে চলতে হবে:
পরিবর্তনশীল (mutable) ভেরিয়েবলের সাথে "lateInit" ব্যবহার করুন। অর্থাৎ, "var" কীওয়ার্ড "lateInit" এর সাথে ব্যবহার করতে হবে।
"lateInit" শুধুমাত্র নন-নাল (non-nullable) ডেটা টাইপের সাথে অনুমোদিত।
"lateInit" প্রাইমিটিভ ডেটা টাইপের সাথে কাজ করে না।
"lateInit" তখন ব্যবহার করা যেতে পারে যখন ভেরিয়েবল প্রপার্টির কোনো getter এবং setter মেথড না থাকে।
উদাহরণ: Lateinit ব্যবহার
class Tutorial {
lateinit var name: String
fun checkLateInit() {
// মান অ্যাসাইন করা হয়েছে কিনা চেক করা
if (this::name.isInitialized)
println("আপনার মান অ্যাসাইন করা হয়নি")
else {
// name আরম্ভ করা
name = "www.tutorialspoint.com/"
println(this.name)
// এটি true ফেরত দেবে
}
}
}
fun main() {
var obj = Tutorial()
obj.checkLateInit()
}
আউটপুট
www.tutorialspoint.com/
Lazy Initialization (লেজি আরম্ভকরণ)
দক্ষ মেমরি ম্যানেজমেন্টের জন্য, কোটলিনে একটি নতুন ফিচার পেশ করা হয়েছে যাকে Lazy initialization বলা হয়। lazy কীওয়ার্ড ব্যবহার করা হলে, অবজেক্টটি শুধু তখন তৈরি হয় যখন তা কল করা হয়, অন্যথায় কোনো অবজেক্ট তৈরি হয় না। lazy() একটি ফাংশন যা একটি ল্যাম্বডা নেয় এবং lazy-এর একটি ইনস্ট্যান্স ফেরত দেয় যা লেজি প্রপার্টিগুলোর প্রতিনিধি (delegate) হিসেবে কাজ করতে পারে। এটি অবজেক্টের অপ্রয়োজনীয় আরম্ভকরণ রোধ করার জন্য ডিজাইন করা হয়েছে।
Lazy শুধুমাত্র নন-নাল ভেরিয়েবলের সাথে ব্যবহার করা যায়।
ভেরিয়েবল শুধুমাত্র val হতে পারে। "var" অনুমোদিত নয়।
অবজেক্ট শুধু একবার আরম্ভ হবে। তারপর, আপনি ক্যাশে মেমরি থেকে মান পাবেন।
অবজেক্টটি আরম্ভ হবে না যতক্ষণ না অ্যাপ্লিকেশনে এটি ব্যবহার করা হয়।
উদাহরণ: Lazy Initialization ব্যবহার
class Demo {
val myName: String by lazy {
println("লেজি ঘোষণায় স্বাগতম")
"www.tutorialspoint.com"
}
}
fun main() {
var obj = Demo()
println(obj.myName)
println("একই অবজেক্টের দ্বিতীয়বার কল -- " + obj.myName)
}
আউটপুট
লেজি ঘোষণায় স্বাগতম www.tutorialspoint.com একই অবজেক্টের দ্বিতীয়বার কল -- www.tutorialspoint.com