Я пытаюсь выяснить, в чем разница между лямбдами Kotlins and Java
. На веб-сайте Kotlin говорится: «Kotlin имеет правильные типы функций, в отличие от SAM-преобразований Java»
И я думаю, что это самая большая разница. Итак, вам нужен функциональный интерфейс в Java. А в kotlin у вас есть типы функций. Вам не нужен дополнительный интерфейс.
И вы можете вызывать лямбды в kotlin. Итак, если вы передадите лямбда в java функции, внутри тела этой функции вам нужно будет вызвать абстрактный метод Single.
int method(IntBinaryOperator op){
return op.applyAsInt(5, 10);
}
и способ kotlin:
fun method(value: Int, op: (Int) -> Int){
print(op(value)) // You have no SAM; you can call op.invoke() or op()
}
fun main() {
method(5) {
it * it
}
}
Так что я думаю, что это огромное преимущество kotlin в том, что вы можете создавать свои собственные лямбды с произвольным числом параметров et c и что вам не нужно создавать дополнительный функциональный интерфейс или каррирование.
Еще одно отличие и преимущество - возможность вызова лямбд с помощью приемников. Я думаю, что все знают эту концепцию, поэтому я могу пропустить ее здесь. Вы можете создавать DSL, у вас есть функции области видимости.
А, и вы можете передавать лямбды вне (), если это последний параметр. Я думаю, что это также важное различие между java и лямбдой. Это более читабельно.
Думаю, в этом разница или я пропустил что-то принципиальное?
Обновление:
Спасибо @ Anime sh Sahu Я забыл о возможности встраивать лямбды
И можно вернуть последнее выражение внутри блока. Таким образом, вам не нужно явно вызывать return