Ответ
В Kotlin есть несколько функций области видимости, которые помогают работать с объектами в определенном контексте:
let– выполняет блок кода для объекта и возвращает результат блока. Полезно для null-проверок:
val length = nullableString?.let { it.length } ?: 0
run– аналогиченlet, но используетthisвместоit. Может работать и без контекстного объекта:
val result = "Hello".run { length + substring(1).length }
with– похож наrun, но не является функцией-расширением:
with(view) {
visibility = View.GONE
alpha = 0f
}
apply– возвращает сам объект после выполнения блока. Идеален для инициализации:
val button = Button(context).apply {
text = "Click me"
setOnClickListener { /* ... */ }
}
also– похож наapply, но используетitвместоthis. Полезен для side-эффектов:
val list = mutableListOf(1, 2).also { it.add(3) }
Выбор зависит от контекста и того, нужен ли результат блока или сам объект.