Различия между лямбдами в Java и Kotlin - PullRequest
2 голосов
/ 09 мая 2020

Я пытаюсь выяснить, в чем разница между лямбдами 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...