Junior
Кои функции за обхват в Kotlin знаете?
sobes.tech AI
Отговор от AI
let: Изпълнява блок от код върху обект и връща резултата от последното изразяване. Често се използва за безопасно извикване на методи върху nullable обекти.run: Има две вариации:- Като разширяваща функция: Изпълнява блок от код върху обекта (
this) и връща резултата от последното изразяване. - Като самостоятелна функция: Изпълнява блок от код без получател и връща резултата от последното изразяване.
- Като разширяваща функция: Изпълнява блок от код върху обекта (
with: Изпълнява блок от код върху предоставен обект-реципиент и връща резултата от последното изразяване.apply: Изпълнява блок от код върху обект (this) и връща самия обект. Често се използва за конфигуриране на свойства на обекта.also: Изпълнява блок от код върху обект (it) и връща самия обект. Използва се за странични действия върху обекта.
// Пример за използване на let
val name: String? = "Kotlin"
val length = name?.let {
// this == null
// it == "Kotlin"
it.length // Връща дължината на низа
} // length == 6
// Пример за използване на run като разширение
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
listOf(first(), last())
// this == numbers
} // firstAndLast == [1, 3]
// Пример за използване на run като самостоятелна функция
val result = run {
// Без получател
println("Изпълняване на блок")
1 + 2 // Връща 3
} // result == 3
// Пример за използване на with
val configuration = configureUsing {
// this - обект, предаден на configureUsing
width = 100
height = 200
}
fun configureUsing(builder: ScopeExample.() -> Unit): ScopeExample {
val example = ScopeExample()
example.builder()
return example
}
class ScopeExample {
var width: Int = 0
var height: Int = 0
}
// Пример за използване на apply
val person = mutableListOf<String>().apply {
// this == списък
add("Alice")
add("Bob")
} // person == ["Alice", "Bob"]
// Пример за използване на also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
// it == списък
println("Обработка на списък: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]