Kotlin ক্লাসে Properties – সহজভাবে সব কিছু শিখুন!

 

🧠 Kotlin ক্লাসে Properties – সহজভাবে সব কিছু শিখুন! 🚀

কোনো ক্লাসের ভেরিয়েবল বা বৈশিষ্ট্য (attribute) কে Property বলা হয়। Kotlin-এ প্রপার্টি সাধারণ ভেরিয়েবল থেকেও শক্তিশালী কারণ এতে getter, setter, custom logic, backing field ইত্যাদি ব্যবহার করা যায়! 🏗️


📌 Basic Property – সাধারণ ভেরিয়েবল 🔥

class Person {
    var name: String = "Unknown"  // Property
}
fun main() {
    val person = Person()
    println(person.name)  // 👉 Unknown
    person.name = "Alice"
    println(person.name)  // 👉 Alice
}

name হলো একটি property
✅ এটি পড়াও যায় (getter) এবং আপডেটও করা যায় (setter)


🛠️ Read-Only Property (val) – শুধু পড়া যাবে, পরিবর্তন করা যাবে না! 🚀

class Person {
    val country: String = "Bangladesh"  // Read-only property
}
fun main() {
    val person = Person()
    println(person.country)  // 👉 Bangladesh
    // person.country = "India" ❌ (Error! Read-only)
}

val ব্যবহার করলে সেটার মান পরিবর্তন করা যাবে না।


🚀 Custom Getter – যখন দরকার ডাটা প্রসেসিং!

class Person(val birthYear: Int) {
    val age: Int
        get() = 2024 - birthYear  // Custom getter
}
fun main() {
    val person = Person(2000)
    println(person.age)  // 👉 24
}

age আসলে কোনো স্টোরড ভ্যালু না, এটি রিয়েল টাইম ক্যালকুলেশন! 🔥


🛠️ Custom Setter – যখন মান আপডেট করার সময় শর্ত দরকার!

class Person {
    var name: String = "Unknown"
        set(value) {
            field = value.uppercase()  // Setter - সবসময় Uppercase হবে
        }
}
fun main() {
    val person = Person()
    person.name = "Alice"
    println(person.name)  // 👉 ALICE
}

✅ এখানে set(value) → যখন ইউজার name সেট করবে, তখন সেট UPPERCASE হয়ে যাবে!


🏗️ Backing Field (field) – প্রপার্টির আসল স্টোরেজ!

class Person {
    var age: Int = 0
        set(value) {
            if (value > 0) field = value  // শুধুমাত্র পজিটিভ মান সেট করা যাবে
        }
}
fun main() {
    val person = Person()
    person.age = -5
    println(person.age)  // 👉 0 (Error হয়নি, কারণ -5 সেট করা হয়নি!)
}

field হচ্ছে ব্যাকিং ফিল্ড → আসল ভ্যালু সংরক্ষণ করে!
setter-এর মধ্যে শর্ত চেক করে, invalid ভ্যালু আটকে দিতে পারি!


🔒 Late Initialization (lateinit) – দেরিতে মান সেট করব!

class Person {
    lateinit var name: String  // Initialize করবো পরে
}
fun main() {
    val person = Person()
    person.name = "Alice"  // দেরিতে ইনিশিয়ালাইজ করা হল
    println(person.name)  // 👉 Alice
}

lateinit ব্যবহার করলে অবজেক্ট তৈরি করার সময় ভ্যালু দেওয়া লাগবে না!


🛑 Lazy Initialization (lazy) – প্রথমবার অ্যাক্সেস করলে লোড হবে! 🚀

class Person {
    val info: String by lazy {
        println("Computing...")
        "Hello Kotlin!"
    }
}
fun main() {
    val person = Person()
    println("Before accessing info")
    println(person.info)  // 👉 Computing... তারপর "Hello Kotlin!"
    println(person.info)  // 👉 "Hello Kotlin!" (ফিরে আসবে, আবার হিসাব করবে না!)
}

lazy ব্যবহার করলে প্রথমবার অ্যাক্সেস করার সময়ই ক্যালকুলেশন হবে!
বারবার কল করলে আগের ভ্যালু রিটার্ন করবে, নতুন করে হিসাব করবে না!


🚀 Summary:

Property Type Read/Write Example
var Read & Write var name: String
val Read-only val country: String
Custom Getter শুধু Read get() = 2024 - birthYear
Custom Setter কাস্টম লজিক সহ Write set(value) { field = value.uppercase() }
Backing Field মূল মান সংরক্ষণ করে field
lateinit দেরিতে ইনিশিয়ালাইজ lateinit var name: String
lazy প্রথমবার অ্যাক্সেস করলে তৈরি হয় val info: String by lazy { ... }

🔥 Final Thought

Kotlin-এ properties অনেক বেশি flexible এবং powerful! আমরা এগুলো দিয়ে getter-setter, data validation, lazy loading, late initialization সব কিছু সহজেই করতে পারি! 🚀


👉 এই বিষয়গুলো ভালোভাবে আয়ত্ত করলে Kotlin-এর ক্লাস আরও সহজে বোঝা যাবে! 😃🔥

Comments

Popular posts from this blog

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

🧠 Regex কী?

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