Junior
Kotlin'da 'super' va 'this' kalit so'zlari qanday ishlaydi?
sobes.tech AI
AIdan javob
this hozirgi sinf yoki lambda ifodasining olchoviga murojaat qiladi. Bu, nomi bilan bir xil bo'lgan mahalliy o'zgaruvchi bo'lsa ham, sinf a'zosini yoki hozirgi ob'ektga murojaat qilish uchun aniq ko'rsatish uchun ishlatiladi.
super ota-ona sinfidagi metodlarni chaqirish yoki xususiyatlarga kirish uchun ishlatiladi. Bu, hozirgi sinfda qayta yozilgan amalga oshirish o'rniga ota-ona sinfidagi amalga oshirishni ishlatish kerak bo'lsa, qo'llaniladi.
Misollar:
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // this ni aniq ishlatish orqali xususiyatga kirish
}
}
open class Parent {
open fun greet() {
println("Ota-ona dan salom")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // ota-ona sinfidagi metodni chaqirish
println("Farzanddan salom")
}
}
Lambda funksiyalarida, this lambda olchoviga murojaat qilishi mumkin:
fun String.addExclamation(): String {
return this + "!" // this, oluvchi satrga murojaat qiladi
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum, kengaytirish funksiyasi, this ichida listga murojaat qiladi
println(sum)
}
Noaniqliklarni hal qilish uchun, agar sizda ichma-ich sinflar yoki olchovli lambda'lar bo'lsa, sifatli this (masalan, this@ClassName yoki this@label) ishlatish mumkin:
class A { // noaniq belgi @A
inner class B { // noaniq belgi @B
fun Int.foo() { // noaniq belgi @foo
val a = this@A // A ob'ektiga murojaat
val b = this@B // B ob'ektiga murojaat
val c = this // Int ob'ektiga, `foo` funksiyasining olchoviga
val c1 = this@foo // Int ob'ektiga, `foo` funksiyasining olchoviga
}
}
}