Kotlin предоставляет пять scope functions (функций области видимости), которые выполняют блок кода над объектом. Они отличаются двумя ключевыми моментами: как ссылаться на объект контекста (this vs it) и какое значение они возвращают.
let — ссылается на контекст как it, возвращает результат лямбды. Лучше всего подходит для null-безопасных проверок и преобразований:nullable?.let { process(it) }
run — ссылается на контекст как this, возвращает результат лямбды. Лучше всего подходит для конфигурации объекта, когда нужен вычисленный результат.with — ссылается на контекст как this, возвращает результат лямбды. Лучше всего подходит для вызова нескольких методов на одном объекте:with(obj) { foo(); bar() }
apply — ссылается на контекст как this, возвращает сам объект. Лучше всего подходит для инициализации объекта и установки свойств:val obj = MyObject().apply { prop = value }
also — ссылается на контекст как it, возвращает сам объект. Лучше всего подходит для побочных эффектов без изменения объекта, например логирования:obj.also { log(it) }
| Функция | Контекст | Возвращает |
|---|---|---|
let | it | Результат лямбды |
run | this | Результат лямбды |
with | this | Результат лямбды |
apply | this | Объект контекста |
also | it | Объект контекста |
apply и also, когда нужно вернуть исходный объект — удобно для цепочек вызовов.let, run и with, когда нужно вернуть вычисленный результат.it (let, also), когда передача объекта аргументом в другую функцию улучшает читаемость.Функция области видимости apply ссылается на объект контекста как this и возвращает результат лямбды, что делает её идеальной для преобразования объекта в другой тип.
Новый — ещё не проверен сообществом
Вы