Ответ
Функции-расширения Kotlin (run, let, also, apply) упрощают работу с объектами:
- let - принимает объект как
it, возвращает результат лямбды.
Используется для преобразования или проверки nullable-объектов:
val length = nullableString?.let { it.length } ?: 0
- run - аналогично
let, но без параметра (thisвместоit).
Можно использовать для инициализации:
val result = service.run {
init()
processRequest()
}
- apply - работает с
this, возвращает сам объект.
Для настройки свойств:
val dialog = AlertDialog.Builder(context).apply {
setTitle("Title")
setMessage("Message")
}.create()
- also - принимает объект как
it, возвращает сам объект.
Для side-эффектов:
val file = File("path").also {
println("Created file: ${it.path}")
}
Ключевое отличие: let/run возвращают результат лямбды, apply/also возвращают контекстный объект. let/also используют it, run/apply - this.