Sobes.tech
Junior

Kotlin-də məlumat sinifləri necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də məlumat sinifləri məlumatların saxlanması üçün istifadə olunur. Kompilyator standart metodları avtomatik olaraq yaradır:

  • equals(): Nümunələri onların xüsusiyyətlərinin dəyərlərinə əsasən müqayisə edir.
  • hashCode(): Xüsusiyyətlərin dəyərlərinə əsaslanan hash kodu yaradır.
  • toString(): Bütün xüsusiyyətlərin adlarını və dəyərlərini daxil edən sətir nümayəndəsini qaytarır.
  • copy(): Obrazın surətini yaradır və lazım gələrsə, göstərilən xüsusiyyətlərin dəyərlərini dəyişir.
  • componentN(): Obrazın xüsusiyyətlərinə ayrıştırma (destructuring) üçün metodlar.
// Məlumat sinfi nümunəsi
data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    val user3 = User("Bob", 25)

    // equals()
    println(user1 == user2) // true
    println(user1 == user3) // false

    // toString()
    println(user1.toString()) // User(name=Alice, age=30)

    // copy()
    val user4 = user1.copy(age = 31)
    println(user4) // User(name=Alice, age=31)

    // componentN() və destrukturing
    val (name, age) = user1
    println("Ad: $name, Yaş: $age") // Ad: Alice, Yaş: 30
}

Əsas nöqtələr:

  • Əsas konstruktor daxilində təyin olunan bütün xüsusiyyətlər val və ya var olmalıdır.
  • Məlumat sinfi abstract, open, sealed və ya inner ola bilməz.
  • Məlumat sinfləri digər sinflərdən irs ala və ya interfeysləri həyata keçirə bilər.
  • Əsas konstruktor xaricində elan olunan xüsusiyyətlər standart metodların yaradılmasında iştirak etmir.
Metod Təsviri
equals() Əsas konstruktorun xüsusiyyətlərini müqayisə edir.
hashCode() Əsas konstruktorun xüsusiyyətlərinə əsaslanan hash yaradır.
toString() Əsas konstruktorun xüsusiyyətlərinin sətir nümayəndəsini göstərir.
copy() Xüsusiyyətləri dəyişdirmə imkanı ilə səthən kopiya yaradır.
componentN() Konstruktorun elanında ardıcıllıqla xüsusiyyətlərə giriş.

Məlumat sinfləri POJO (Plain Old Java Object) və ya DTO (Data Transfer Object) ilə işləmək işini əhəmiyyətli dərəcədə sadələşdirir və boilerplate kodunu azaldır.