Назад к вопросам
Middle
138
questionbank

В чем разница между функциями расширения let, run, also и apply в Kotlin?

Sobes Copilot

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

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

sobes.tech AI

let: Вызывает замыкание на объекте и возвращает результат замыкания. Позволяет использовать объект как аргумент лямбда-выражения (it). Подходит для работы с nullable объектами.

// Пример использования let
val nullableString: String? = "Hello"
val length = nullableString?.let {
    // it - это ненулевой String
    it.length
}

run: Выполняет блок кода на объекте и возвращает результат блока. Внутри блока объект доступен как this. Полезно для инициализации объекта и последующего вызова методов.

// Пример использования run
val result = buildString {
    // this - это StringBuilder
    append("Start\n")
    append("Middle\n")
}.run {
    // this - это String
    uppercase()
}

also: Выполняет замыкание на объекте и возвращает сам объект. Позволяет выполнять дополнительные действия (например, логирование или конфигурация) над объектом, не изменяя его.

// Пример использования also
val list = mutableListOf("a", "b", "c").also {
    // it - это MutableList
    println("Список создан: $it")
}

apply: Выполняет замыкание на объекте и возвращает сам объект. Внутри блока объект доступен как this. Удобно для настройки свойств объекта.

// Пример использования apply
val textView = TextView(context).apply {
    // this - это TextView
    text = "Привет, мир!"
    textSize = 16f
    setTextColor(Color.BLACK)
}

Основные различия:

Функция Как доступен объект Что возвращает Типичное применение
let it Результат лямбды Nullable-объекты, трансформация
run this Результат лямбды Инициализация и вызов методов
also it Сам объект Дополнительные действия (Side effects)
apply this Сам объект Настройка свойств