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 |
Օբյեկտը ինքնը | Գույների կարգավորում |