Biz ko'pincha unda ba'zi ma'lumotlarni saqlash uchun sinflarni yaratamiz. Bunday sinflarda ba'zi standart funktsiyalar ko'pincha ma'lumotlardan olinadi. Kotlinda bu turdagi sinf ma'lumotlar klassi sifatida tanilgan va ma'lumotlar sifatida belgilangan.
Ma'lumotlarga misol:
data class Student ( val nomi: String, val roll_no: Int)
Kompilyator avtomatik ravishda quyidagi funktsiyalarni oladi:
- equals()
- hashCode()
- toString()
- copy()
Ma'lumotlar sinflarini yaratish qoidalari
Ma'lumotlar sinflari izchillikni ta'minlash uchun quyidagi talablarga javob berishi kerak:
- Asosiy konstruktor kamida bitta parametrga ega bo'lishi kerak.
- Barcha asosiy konstruktor parametrlari val yoki var sifatida belgilanishi kerak.
- Ma'lumotlar sinflari mavhum, ochiq, muhrlangan yoki ichki bo'lishi mumkin emas.
- Ma'lumotlar sinflari faqat interfeyslarni amalga oshirishi mumkin.
toString()
Bu funksiya ma'lumotlar sinfida belgilangan barcha parametrlar qatorini qaytaradi.
Misol:
fun main(args: Array<String>)
{
data class odam(val soni: Int,val ism: String,val buyi:Int)
val odam1=odam(1,"Abror",50)
println(man1.toString());
}
Chiqish:
odam (soni = 1, ism = Abror, buyi = 50)
Eslatma: Kompilyator faqat avtomatik ravishda yaratilgan funksiyalar uchun asosiy konstruktor ichida belgilangan xususiyatlardan foydalanadi.
U sinf tanasida e'lon qilingan xususiyatlarni o'z ichiga olmaydi.
Misol:
fun main(args: Array<String>)
{
data class odam(val ism: String)
{
var buyi: Int = 0;
}
val odam1=odam("Abror")
man1.buyi= 70
println(odam1.toString());
println(odam1.buyi);
}
Chiqish:
odam (ism = Abror)
70
Bu yerda balandlik toString() funktsiyasi tomonidan ishlatilmaydi.
Copy()
Ba'zan biz obyektni nusxalashimiz kerak, bunda uning ba'zi xususiyatlarida ba'zi o'zgarishlar qolganlari o'zgarmaydi. Bu holda Copy() funktsiyasidan foydalaniladi.
Copy() xususiyatlari:
- U asosiy konstruktorda belgilangan barcha argumentlar yoki a'zolarni nusxalaydi.
- Ikki obyekt bir xil asosiy parametr qiymatlariga va belgilangan bo'lsa, turli sinf tana qiymatlariga ega bo'lishi mumkin.
Misol:
fun main(args: Array<String>)
{
data class odam(val ism: String, val yoshi: Int)
{
var buyi: Int = 0;
}
val odam1 = odam("Abror",18)
val odam2 = odam1.copy(ism="Sherzod")
val odam3 = odam1.copy();
odam1.buyi=150
odam2.buyi=170
odam3.buyi=180
println("${odam1} ${odam1.buyi} sm uzunlikda.")
println("${odam2} ${odam2.buyi} sm uzunlikda.")
println("${odam3} ${odam3.buyi} sm uzunlikda.")
}
hashCode() va equals()
- hashCode() funktsiyasi obyekt uchun xesh kod qiymatini qaytaradi.
- Agar ikkita obyekt bir xil tarkibga ega bo'lsa va u "==" ga o'xshash ishlayotgan bo'lsa, Float va Double qiymatlari uchun boshqacha ishlasa, equals() usuli true ni qaytaradi.
hashCode() xususiyatlari
- Xuddi shu obyektda ikki marta e'lon qilingan ikkita xesh kod teng bo'ladi.
- Agar equals() usuli bo'yicha ikkita obyekt teng bo'lsa, qaytarilgan xesh kodlari ham bir xil bo'ladi
fun main(args: Array<String>)
{
data class man(val name: String, val age: Int)
val man1 = man("Abror",18)
val man2 = man1.copy(name="Sherzod")
val man3 = man1.copy();
val hash1=man1.hashCode();
val hash2=man2.hashCode();
val hash3=man3.hashCode();
println(hash1)
println(hash2)
println(hash3)
println("hash1 == hash 2 ${hash1.equals(hash2)}")
println("hash2 == hash 3 ${hash2.equals(hash3)}")
println("hash1 == hash 3 ${hash1.equals(hash3)}")
}
Izoh: man1 va man2 bir xil obyekt tarkibiga ega, shuning uchun ular teng, shuning uchun ular bir xil xesh kod qiymatlariga ega.