В чем разница между функциями расширения 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 |
Сам объект | Настройка свойств |