Что такое трейлинг-лямбда и запятая в Kotlin?

Трейлинг лямбда и трейлинг запятая — это две важные особенности Kotlin, которые вы должны знать, если вы новичок в Kotlin!

Эта статья была первоначально опубликована на vtsen.hashnode.dev 6 августа 2022 года.

Трейлинг-лямбда — это нечто новое в Kotlin, чего нет в других языках программирования. По крайней мере, я не знаю ни одного другого языка программирования, который бы ее поддерживал.

Когда вы видите код вроде этого:

var result = operateOnNumbers(a, b) { input1, input2 ->
    input1 + input2
}
println(result)
Войти в полноэкранный режим Выйти из полноэкранного режима

Это означает, что operateOnNumbers() имеет 3 параметра. Последний параметр — это определение функции, которое обычно передается либо в виде ссылки на функцию, либо в виде лямбды.

var result = operateOnNumbers(
    input1 = a,
    input2 = b,
    operation = { input1, input2 ->
        input1 + input2
    }
)
println(result)
Вход в полноэкранный режим Выход из полноэкранного режима

Почему-то я до сих пор не могу привыкнуть к этому синтаксису лямбды. Это выглядит как реализация функции.

Поэтому мой разум всегда должен автоматически переходить к этому (код за скобками на самом деле является последним параметром функции) каждый раз, когда я вижу синтаксис Trailing Lambda.

Сигнатура и реализация operateOnNumbers() выглядит следующим образом:

fun operateOnNumbers(
    input1: Int,
    input2: Int,
    operation: (Int, Int) -> Int): Int {

    return operation(input1, input2)
}
Войти в полноэкранный режим Выйти из полноэкранного режима

С другой стороны, трейлинг-запятые довольно часто встречаются в других языках.

С запятой

var result = operateOnNumbers(
    a, 
    b, // trailing comma here
) { input1, input2 ->
    input1 + input2
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Без запятой

var result = operateOnNumbers(
    a, 
    b // no trailing comma here
) { input1, input2 ->
    input1 + input2
}
Войти в полноэкранный режим Выход из полноэкранного режима

Преимущество использования этой функции заключается в том, что она позволяет легче различать и объединять файлы. Для меня это облегчает жизнь при копировании и вставке. Да, я много копирую и вставляю!

Заключение

Надеюсь, вам понравился этот короткий пост. Я хочу написать об этом (особенно о Trailing Lambda), потому что для меня это иногда выглядит запутанным, особенно вызов функции. Мне всегда нужно напоминать себе, что код за скобками — это последний параметр функции.


См. также

  • Советы и хитрости Kotlin

Оцените статью
devanswers.ru
Добавить комментарий