Scope functions позволяют выполнять блок кода в контексте объекта. Основные функции: let, run, with, apply, also. Каждая имеет свои особенности в отношении получателя (invoker, receiver) и возвращаемого значения.
| Функция | Получатель | Возвращаемое значение |
|---|---|---|
let | it | Результат последнего выражения в блоке |
run | this | Результат последнего выражения в блоке |
with | this (не в качестве метода расширения) | Результат последнего выражения в блоке |
apply | this | Сам объект настройки |
also | it | Сам объект настройки |
Использование:
let: Для выполнения действий над объектом, допускающим значение null, или для введения локальной переменной с более коротким именем.kotlin
run: Для выполнения блока кода с контекстом объекта (как with), но в качестве метода расширения, или когда требуется вычислить значение в контексте объекта.kotlin
with: Для группировки вызовов методов объекта без использования "точки" перед каждым вызовом. Не является методом расширения.kotlin
apply: Для настройки объекта. Возвращает сам настроенный объект. Удобно для создания и инициализации объектов в одном выражении.kotlin
also: Для выполнения дополнительных действий над объектом, таких как логирование, после некоторой операции. Возвращает сам объект.kotlin
Выбор подходящей scope function зависит от того, что требуется сделать с объектом и какое значение должно быть возвращено.