Введение в scope-функции в Kotlin
Scope-функция вызывается у значения и передает его в лямбду. Внутри блока можно читать поля, вызывать методы и строить выражение, не повторяя имя переменной на каждой строке. Такой прием часто встречается в коде на Kotlin рядом с цепочками преобразований.
Смысл общий: есть объект-контекст, есть блок действий над ним и есть значение, которое выражение в блоке отдает наружу.
Простой пример - расширение let у непустой
строки. Блок получает строку параметром it,
последнее выражение в лямбде становится результатом
всего вызова:
fun main() {
val label = "kotlin"
val upper = label.let {
it.uppercase()
}
println(upper)
}
Строка в переменной label попадает в лямбду
один раз, а снаружи остается уже готовый текст в
верхнем регистре. Имя it задает компилятор,
если у лямбды один параметр и имя не указано явно.
Если результат scope-вызова сразу нужен в другой команде, его кладут в переменную или передают дальше. Контекстный объект при этом не обязан меняться: блок может только прочитать данные и вернуть новое значение.
Scope-функции не заменяют обычные методы класса. Они удобны, когда логика короткая, локальна для места вызова и хорошо читается как «сделать что-то с этим значением здесь и сейчас».