То, что вы спрашиваете, объяснено в этой официальной документации .
Если и только если последний аргумент функции является лямбда-выражением, вы можете извлечь его из парантез вызова, чтобы поместить его в строку справа от функции. Он допускает более приятный синтаксис DSL.
EDIT : Давайте рассмотрим пример:
Один из хороших вариантов использования - контекстное программирование. Представьте, что у вас есть близкий объект. Вы хотите ограничить его использование, чтобы убедиться, что оно правильно закрыто, когда больше не нужно. В Java вы получаете попытку с ресурсами:
try (final AutoCloseable myResource = aquireStuff()) {
// use your resource here.
}
Kotlin обеспечивают функцию use
. Теперь вы можете сделать:
acquireStuff().use( { doStuff1(it) ; doStuff2(it) } )
или написать:
acquireStuff().use {
doStuff1(it)
doStuff2(it)
}
Это похоже на Java try-w-ресурс, но оно расширяемо для любого вашего API. Позволяет вам проектировать библиотеки, предоставляя расширенные конструкции конечным пользователям.