Как лучше создавать функцию?

Рейтинг: 0Ответов: 1Опубликовано: 11.07.2023

Как лучше объявлять функцию: через выражение

fun f() {
    ...
}

или анонимной лямбдой?

val f = {
    ...
}

И в чем преимущества?

Ответы

▲ 1

Нельзя сказать что "одно лучше другого", то и то является функциями, но есть различия.

  • Анонимные функции позволяют указывать тип возвращаемого значения, а лямбда-выражения — нет
  • Анонимная функция все еще является функцией, поэтому возврат из нее ведет себя так же, как возврат из любой функции. Однако возврат из лямбды на самом деле возвращает функцию, содержащую лямбду

UPD1

Если задавать функцию через выражение, то её можно лаконично уместить в одну строчку без явного упоминания Return (но с явным упоминанием типа):

fun add(a: Int, b: Int): Int = a + b

UPD2

Из того что написано выше, можно, кстати, сделать вывод о том, что лямбду можно передавать как аргумент для другой функции, что даёт гибкости (наверное).

Тем не менее, с анонимными лямбдами возможны следующие конструкции:

fun performOperation(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

fun main() {
    val result = performOperation(5, 3) { x, y -> x + y }
    println(result) // Выводит: 8
}

В функции main() мы вызываем performOperation и передаем анонимную лямбду { x, y -> x + y } в качестве аргумента operation. Это лямбда-выражение складывает два числа. В результате мы получаем сумму 5 + 3, равную 8, которую выводим на консоль.