Junior
რა არის 'scope functions' Kotlin-ში და როდის უნდა გამოიყენოს?
sobes.tech AI
პასუხი AI-სგან
Scope функциялары объект контекстинде код блогун ишке ашырууга мүмкүндүк берет. Негизги функциялар: let, run, with, apply, also. Ар бири өзүнүн өзгөчөлүктөрү менен кабыл алгыч (invoker, receiver) жана кайтарылуучу мааниге тиешелүү.
| Функция | кабыл алгыч | кайтарылуучу мааниси |
|---|---|---|
let |
it |
Блоктун акыркы билдирүүсүнүн натыйжасы |
run |
this |
Блоктун акыркы билдирүүсүнүн натыйжасы |
with |
this (кеңейтүү методу катары) |
Блоктун акыркы билдирүүсүнүн натыйжасы |
apply |
this |
Өзгөртүүлөрдөн кийин объект өзү |
also |
it |
Өзгөртүүлөрдөн кийин объект өзү |
Колдонуу:
let: Объектке карата иш-аракеттерди аткаруу үчүн, ал null болушу мүмкүн, же кыска аталыштагы жергиликтүү өзгөрмө киргизүү үчүн.
// Мисал: nullable объектте методду коопсуз чакыруу
val str: String? = "Hello"
str?.let {
println(it.length) // Эгер str null эмес болсо гана ишке ашат
}
run: Объекттин контекстинде код блогун аткаруу (мисалы,withсыяктуу), бирок кеңейтүү методу катары, же объекттин контекстинде маанини эсептөө керек болгондо.
// Мисал: объектти настройка жана натыйжаны алуу
val configurations = buildList {
add("Config 1")
add("Config 2")
}.run {
println("Applying configurations...")
joinToString(", ") // List<String> контекстинде ишке ашат, String кайтарат
}
println(configurations)
with: Объекттин методдорун чакырууну топтоо үчүн, ар бир чакырууда "нүктө" колдонбостон.
// Мисал: бир объекттин методдорун топтоо
val person = Person("Alice", 30)
with(person) {
println(name) // Өзгөрмөлөргө түздөн-түз жетүү
println(age)
}
apply: Объектти настройка үчүн. Өзгөртүүлөрдөн кийин ошол объект кайтарат. Объект түзүү жана аны конфигурациялоо үчүн ыңгайлуу.
// Мисал: объект түзүү жана настройка бир эле жолдо
val button = Button().apply {
text = "Click Me"
onClick = { println("Button clicked") }
}
also: Объектке кошумча аракеттерди аткаруу үчүн, мисалы, лог жүргүзүү, белгилүү бир операциядан кийин. Өзгөртүүлөрдөн кийин ошол объект кайтарат.
// Мисал: аракеттен кийин лог жүргүзүү
val number = 42
val squared = number.also {
println("Processing number: $it") // `it` (number) үстүндө иштейт, number кайтарат
}.run {
this * this // `this` (number) үстүндө иштейт, квадраты кайтарат
}
println("Squared value: $squared")
Туура scope функциясын тандоо объект менен эмне кылуу керек жана кайсы маанини кайтаруу керек экенине көз каранды.