Sobes.tech
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]