Junior
Ինչպես են աշխատում 'super' և 'this' բանալի բառերը Kotlin-ում:
sobes.tech AI
Պատասխան AI-ից
Այս this-ը հղում է դասի ընթացիկ օրինակին կամ lambda արտահայտության ստացողին: Այն օգտագործվում է դասի անդամը կամ ընթացիկ օբյեկտի հղումը հստակ ցույց տալու համար, երբ առկա է անհամապատասխանություն (օրինակ, երբ տեղական փոփոխականը նույն անունն ունի):
super-ը օգտագործվում է ծնողական դասի մեթոդները կանչելու կամ հատկություններին մուտք գործելու համար: Այն կիրառվում է, երբ անհրաժեշտ է օգտագործել ծնողական դասի իրականացմանը՝ փոխարենը վերագրած իրականացմանը, որը գտնվում է ընթացիկ դասում:
Օրինակներ՝
class MyClass(val value: Int) {
fun printValue() {
println(this.value) // this- ի հստակ օգտագործում՝ հատկությանը մուտք գործելու համար
}
}
open class Parent {
open fun greet() {
println("Բարև ծնողից")
}
}
class Child : Parent() {
override fun greet() {
super.greet() // ծնողական դասի մեթոդի կանչում
println("Բարև երեխայից")
}
}
Lambda-ների մեջ, this կարող է վերաբերվել lambda ստացողին:
fun String.addExclamation(): String {
return this + "!" // this- ը վերաբերում է ստացող տողին
}
fun main() {
val numbers = listOf(1, 2, 3)
val sum = numbers.sum() // sum- ը ընդարձակումային ֆունկցիա է, this- ը ներսում վերաբերում է list-ին
println(sum)
}
Անորոշությունը լուծելու համար, երբ ունեք ներքին դասեր կամ lambda-ներ ստացողներով, կարող եք օգտագործել որակյալ this-ը (this@ClassName կամ this@label):
class A { // անանուն նշան @A
inner class B { // անանուն նշան @B
fun Int.foo() { // անանուն նշան @foo
val a = this@A // հղում A- ի օրինակին
val b = this@B // հղում B- ի օրինակին
val c = this // Int- ի օրինակին, `foo`- ի ստացողին
val c1 = this@foo // Int- ի օրինակին, `foo`- ի ստացողին
}
}
}