Sobes.tech
Middle

Ի՞նչն է տարբերությունը Kotlin-ում let, run, also և apply ընդլայնման ֆունկցիաների միջև։

sobes.tech AI

Պատասխան AI-ից

let: Զանգահարում է փակման վրա օբյեկտ և վերադարձնում է փակման արդյունքը: Ինքնագործում է օբյեկտը որպես արգումենտ lambda արտահայտությունում (it): Հարմար է աշխատելու nullable օբյեկտների հետ:

// Օրինակ `let`-ի
val nullableString: String? = "Hello"
val length = nullableString?.let {
    // it - ոչ-null String
    it.length
}

run: Կատարում է կոդի բլոկ օբյեկտի վրա և վերադարձնում բլոկի արդյունքը: Բլոկի ներսում օբյեկտը հասանելի է որպես this: Հարմար է օբյեկտի ինիցիալիզացիայի և մեթոդների կանչի համար:

// Օրինակ `run`-ի
val result = buildString {
    // this - StringBuilder
    append("Start\n")
    append("Middle\n")
}.run {
    // this - String
    uppercase()
}

also: Զանգահարում է փակման վրա և վերադարձնում է նույն օբյեկտը: Հարմար է լրացուցիչ գործողությունների համար (օրինակ, գրանցում կամ կոնֆիգուրացիա) առանց փոփոխելու օբյեկտը:

// Օրինակ `also`-ի
val list = mutableListOf("a", "b", "c").also {
    // it - MutableList
    println("Ստեղծվել է ցանկը: $it")
}

apply: Զանգահարում է փակման վրա և վերադարձնում է նույն օբյեկտը: Բլոկի ներսում օբյեկտը հասանելի է որպես this: Հարմար է օբյեկտի հատկությունների կարգավորելու համար:

// Օրինակ `apply`-ի
val textView = TextView(context).apply {
    // this - TextView
    text = "Բարև, աշխարհ!"
    textSize = 16f
    setTextColor(Color.BLACK)
}

Հիմնական տարբերությունները:

Ֆունկցիա Օբյեկտին ինչպես հասնել Ինչ է վերադարձնում Տիպիկ կիրառումը
let it Lambda արդյունքը Nullable օբյեկտներ, փոխակերպում
run this Lambda արդյունքը Օբյեկտի ինիցիալիզացիա և մեթոդների կանչում
also it Օբյեկտը ինքնը Լրացուցիչ գործողություններ (կողմ ազդեցություններ)
apply this Օբյեկտը ինքնը Գույների կարգավորում