Ma'lumotlar sinflarining dekompozitsiyasi
Kotlin ma'lumotlar sinflarini o'zgaruvchiga ajratish qobiliyatini beradi:
1
2018-05-01 xoxlasa buladi 121 2
3
4
5
6
7
sakkiz
to'qqiz
|
fun main() {
val alice: Person = Person("Alice", 24)
val (username, userage) = alice
println("Name: $username Age: $userage") // Name: Alice Age: 24
}
data class Person(var name: String, var age: Int)
|
Umumlashtirish Umumiy sinflar va funktsiyalar
Tovar yoki tovar usullari va sinflarni turlari darslari va vazifalari belgilangan vaqtda noma'lum bo'lgan moslamalarni foydalanishingiz mumkin qilurmiz bir texnik vakili. Jeneriklar sizga har xil turlarni almashtirish mumkin bo'lgan shablonlarni aniqlash imkonini beradi.
Umumlashtirish qanday vazifalarni hal qiladi? Aytaylik, bizda quyidagi sinf bor
Umumiy turlar
Umumiy turlar ob'ekt turlari parametrlangan turlarni ifodalaydi. Bu nimani anglatadi? Quyidagi sinfni ko'rib chiqing:
1
|
class Person(val id: T, val name: String)
|
Person klassi T parametridan foydalanadi . Parametrlar sinf nomidan keyin burchakli qavs ichida paydo bo'ladi. Bu parametr sinflar aniqlanmagan vaqtda ma'lum bo'lmagan ma'lumotlar turini ko'rsatadi.
Birlamchi konstruktor ididentifikatorni ifodalovchi xususiyatni belgilaydi. Bu T parametridan o'tadigan turni ifodalaydi. Person klassi aniqlanganda biz bu tur qanday bo'lishini bilmaymiz.
Parametrning nomi o'zboshimchalik bilan (agar u kalit so'zlarga mos kelmasa). Lekin T odatda qisqartirish sifatida ishlatiladi.
Shaxs turidan foydalanganda, uni ma'lum bir tur bilan yozish kerak, ya'ni T parametri orqali qaysi tur o'tkazilishini ko'rsatish kerak:
1
2018-05-01 xoxlasa buladi 121 2
3
4
5
6
7
sakkiz
to'qqiz
o'n
|
fun main() {
val tom: Person = Person(367, "Tom")
val bob: Person = Person("A65", "Bob")
println("${tom.id} - ${tom.name}")
println("${bob.id} - ${bob.name}")
}
class Person(val id: T, val name: String)
|
Ob'ektni yozish uchun tur nomidan keyin burchakli qavs ichida ma'lum bir tur ko'rsatiladi:
Bu holda, biz aytamizki, T parametri aslida Int turini ifodalaydi. Shunday qilib, id xususiyati uchun Person ob'ektining konstruktoriga raqamli Int qiymatini berish kerak:
Ikkinchi ob'ekt String sifatida yoziladi, shuning uchun id xususiyati uchun konstruktorda satr uzatiladi:
1
|
val bob: Person = Person("A65", "Bob")
|
Agar konstruktor T parametridan foydalansa, u holda, printsipial jihatdan, biz ob'ektning qaysi turi bo'yicha yozilishini ko'rsata olmaymiz - bu tur konstruktor parametrining turidan kelib chiqadi:
1
2018-05-01 xoxlasa buladi 121 2
|
val tom = Person(367, "Tom")
val bob = Person("A65", "Bob")
|
Shu bilan birga, tip parametrlari sinf ichida nafaqat xususiyatlarni aniqlashda, balki funktsiyalarda ham keng qo'llanilishi mumkin:
1
2018-05-01 xoxlasa buladi 121 2
3
4
5
6
7
sakkiz
to'qqiz
o'n
o'n bir
12
13
o'n to'rt
15
16
17
o'n sakkiz
|
fun main() {
val tom = Person("qwrtf2", "Tom")
tom.checkId("qwrtf2") // The same
tom.checkId("q34tt") // Different
}
class Person(val id: T, val name: String){
fun checkId(_id: T){
if(id == _id){
println("The same")
}
else{
println("Different")
}
}
}
|
Bu yerda Person klassi checkId()id ning _id parametri qiymatiga tengligini tekshiradigan funksiyani belgilaydi . Bu holda, _id parametri T tipida bo'ladi, ya'ni id xususiyati bilan bir xil bo'ladi.
Ta'kidlash joizki, umumiy turlar Kotlinda keng qo'llaniladi. Sinf tomonidan taqdim etilgan eng yorqin misol Array. Sinf parametri massiv qanday turdagi elementlarni saqlashini aniqlaydi:
1
2018-05-01 xoxlasa buladi 121 2
|
val people: Array = arrayOf("Tom", "Bob", "Sam")
val numbers: Array = arrayOf(1, 2, 3, 4)
|
Do'stlaringiz bilan baham: |