Назад к вопросам
Junior
68
questionbank

Какие функции области видимости в Kotlin вы знаете?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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("Running a block")
    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("Processing list: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]