Kotlin Property Accessors & Setters – কীভাবে প্রপার্টি অ্যাক্সেস এবং সেটিং কাজ করে?

 

🔑 Kotlin Property Accessors & Setters – কীভাবে প্রপার্টি অ্যাক্সেস এবং সেটিং কাজ করে? 🤔

Kotlin-এ Property Accessors এবং Setters একটি গুরুত্বপূর্ণ ফিচার, যার মাধ্যমে আমরা কোনো প্রপার্টির মান (value) প্রাপ্তি বা সেট করতে পারি। আসুন, এটি সহজভাবে বুঝে নি! 🧠


🎯 Property Accessor কি?

Kotlin-এ Property Accessor হল একটি মেথড যা একটি প্রপার্টির মান পেতে (getter) বা সেট করতে (setter) সাহায্য করে।
এটি মূলত কনভেনিয়েন্ট (convenient) ভাবে প্রপার্টির মানের সাথে কাজ করতে ব্যবহৃত হয়।


🏗️ 1️⃣ Default Getter & Setter

Kotlin-এ প্রপার্টি ডিফাইন করলে, সাধারণত একটি getter এবং একটি setter তৈরি হয়ে যায়।
যেমন:

class Person {
    var name: String = "John"
}

এখানে, name প্রপার্টি যদি আমরা অ্যাক্সেস করতে চাই, Kotlin অটোমেটিকালি getter এবং setter তৈরি করে।

Getter: প্রপার্টির মান নিয়ে আসে।
Setter: প্রপার্টির মান সেট করে।


🎯 2️⃣ Getter (প্রপার্টি অ্যাক্সেস)

Getter হল সেই ফাংশন যা প্রপার্টির মান পেতে সাহায্য করে। যদি আপনার প্রপার্টির জন্য স্পেশাল লজিক প্রয়োজন হয়, তখন আপনি নিজে get() মেথড লিখতে পারেন।

উদাহরণ:

class Person(val firstName: String, val lastName: String) {
    val fullName: String
        get() = "$firstName $lastName" // Getter কাস্টমাইজড!
}

fun main() {
    val person = Person("John", "Doe")
    println(person.fullName)  // Output: John Doe
}

📌 এখানে:

  • fullName প্রপার্টি কাস্টম getter দিয়ে তৈরি হয়েছে, যেখানে দুইটি ভ্যালু (firstName & lastName) যুক্ত হয়েছে।

🎯 3️⃣ Setter (প্রপার্টি সেট করা)

Setter হল সেই ফাংশন যা প্রপার্টির মান সেট করতে সাহায্য করে। আপনি চাইলে নিজের setter কাস্টমাইজ করতে পারেন, যাতে কিছু চেক বা লজিক প্রয়োগ করতে পারেন।

উদাহরণ:

class Person {
    var age: Int = 0
        set(value) {
            if (value >= 0) {  // Check to make sure age can't be negative
                field = value  // 'field' refers to the backing field
            } else {
                println("Age can't be negative!")
            }
        }
}

fun main() {
    val person = Person()
    person.age = 25  // Valid age
    println(person.age)  // Output: 25

    person.age = -5  // Invalid age
    println(person.age)  // Output: 25
}

📌 এখানে:

  • Setter ব্যবহার করে age প্রপার্টির মান চেক করা হয়েছে
  • যদি মান নেগেটিভ হয়, তাহলে সেট করতে দেওয়া হয়নি।

field কি?
field হল Kotlin এর backing field, যেখানে আসল প্রপার্টি ভ্যালু রাখা হয়। Setter মেথডের ভিতরে এটা ব্যবহৃত হয়।


🎯 4️⃣ Custom Getter & Setter

আপনি চাইলে getter এবং setter কাস্টমাইজ করতে পারেন, যাতে আপনি বিশেষ প্রক্রিয়া বা লজিক প্রয়োগ করতে পারেন।

উদাহরণ:

class Person {
    var temperature: Double = 37.0
        get() = field // Return the actual value
        set(value) {
            if (value > 40) {
                println("Fever alert!")
            }
            field = value
        }
}

fun main() {
    val person = Person()
    person.temperature = 39.5  // Normal temperature
    println(person.temperature)  // Output: 39.5

    person.temperature = 41.0  // Fever alert!
    println(person.temperature)  // Output: 41.0
}

📌 এখানে:

  • Custom Getter: temperature প্রপার্টির ভ্যালু ফেরত দেয়।
  • Custom Setter: যদি ভ্যালু 40-এর বেশি হয়, ফিভার এলার্ট দেখায়।

🎯 5️⃣ Backing Fields

Kotlin-এ যদি আপনি custom getter/setter ব্যবহার করেন, তবে backing field ব্যবহার করা হয় মান সংরক্ষণ করতে।
এটা কেবল setter বা getter মেথডের ভিতরে ব্যবহৃত হয়।

class Person {
    var name: String = "Unknown"
        set(value) {
            if (value.isNotEmpty()) {
                field = value  // Field ব্যবহার করে মান সেট করা
            }
        }
}

📌 এখানে:
field ব্যবহার করে প্রকৃত প্রপার্টি name-এ মান সেট করা হয়েছে।


🎯 6️⃣ Read-Only Property (val)

val ব্যবহার করলে, আপনি শুধু getter পেতে পারেন, setter পাবেন না। মান একবার সেট করা হলে আপনি তা পরিবর্তন করতে পারবেন না।

class Person {
    val name: String = "John"
}

fun main() {
    val person = Person()
    println(person.name)  // Output: John
    // person.name = "Doe" // Error! 'name' is read-only
}

🎯 7️⃣ Lazy Initialization

Kotlin-এ lazy প্রপার্টি মান একমাত্র তখনই ইনিশিয়ালাইজ হয় যখন সেটি প্রথমবার ব্যবহার করা হয়। এটা লেটি ইনিশিয়ালাইজেশন বলে, যা প্রপার্টি ইনিশিয়ালাইজেশন বিলম্বিত করে।

val myName: String by lazy {
    println("Initializing myName...")
    "John Doe"
}

fun main() {
    println(myName)  // Output: Initializing myName... John Doe
}

📌 এখানে:
myName প্রপার্টি প্রথমবার ব্যবহৃত হওয়ার সময়ই ইনিশিয়ালাইজ হচ্ছে!


সারাংশ:

  • Getter: প্রপার্টির মান পেতে সাহায্য করে।
  • Setter: প্রপার্টির মান সেট করতে সাহায্য করে।
  • Custom Getter & Setter: আপনার প্রয়োজন অনুযায়ী কাস্টম লজিক ব্যবহার করতে পারেন।
  • Backing Field: কাস্টম getter/setter ব্যবহার করার সময় অসল মান সংরক্ষণ করতে ব্যবহৃত হয়।

📌 Kotlin-এ Property Accessors & Setters কোডের পুনঃব্যবহারযোগ্যতা এবং মান নিয়ন্ত্রণে সহজ ও শক্তিশালী উপায়!

Comments

Popular posts from this blog

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

🧠 Regex কী?

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