Какие знаешь scope функции

«Какие знаешь scope функции» — вопрос из категории Kotlin, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin есть несколько scope-функций для работы с объектами в контексте:

  1. let - выполняет блок кода с объектом как аргумент (it), возвращает результат блока
val length = str?.let { 
    println(it) 
    it.length 
}
  1. run - аналогично let, но доступ к объекту через this, возвращает результат блока
val result = service.run {
    port = 8080
    start()
}
  1. with - как run, но не extension-функция
with(config) {
    println(host)
    timeout = 5000
}
  1. apply - работает с объектом как this, возвращает сам объект
val dialog = Dialog().apply {
    setTitle("Hello")
    setCancelable(true)
}
  1. also - как apply, но доступ через it, возвращает объект
val list = mutableListOf(1,2).also {
    it.add(3)
}

Выбор зависит от необходимости: нужен ли результат (let/run/with) или модификация объекта (apply/also), и как удобнее обращаться к объекту (this/it).