Sobes.tech
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 функциясын тандоо объект менен эмне кылуу керек жана кайсы маанини кайтаруу керек экенине көз каранды.