В Котлине есть функция Lambda, которую еще называют анонимной функцией. Лямбда-функция — это короткий и простой способ определить функцию без явного имени.
Лямбда-функция записывается в круглых скобках и имеет одно выражение, которое используется в качестве возвращаемого значения. Вот простой пример функции Lambda в Kotlin:
Лямбда-выражение можно сохранить в обычной переменной, а затем вызвать как обычную функцию, используя имя этой переменной.
В этом примере мы определяем лямбда-функцию {println("Привет, Котлин!")} и сохраните его в переменной приветствие. Затем мы можем вызвать функцию Lambda, указав имя переменной. приветствие и пустой список аргументов () использовать. В этом примере мы вызываем функцию три раза, и все три раза будет «Привет, Котлин!» изданный. Поскольку лямбда-выражение представляет собой сокращенную форму функции, переменная приветствие тип функции () -> Единица измерения.
Лямбда-выражение также можно выполнить как обычную функцию, используя круглые скобки.
Передача параметров в Lambda
Лямбды, как и функции, могут принимать параметры. Чтобы передать параметры в лямбда-выражение, стрелка -> использовал. Параметры указываются слева от стрелки, а тело лямбда-выражения, т. е. выполняемый код, — справа от стрелки.
Лямбда-выражение можно вызвать напрямую, если оно определено путем указания значений параметров в круглых скобках после выражения. Это полезно, когда вы хотите выполнить функцию только один раз и вам не нужна отдельная переменная для хранения функции.
Если лямбда-выражение имеет несколько параметров, они разделяются запятыми слева от стрелки:
Вот пример на Kotlin, демонстрирующий лямбда-выражение с несколькими параметрами:
Если вы хотите выполнить несколько операторов в лямбда-выражении, эти операторы можно разместить в отдельных строках, следующих за стрелкой. Ниже приведен пример, демонстрирующий лямбда-выражение с несколькими действиями:
Лямбда-выражения как аргументы в функциях
Лямбда-выражения можно использовать в качестве аргументов функций, если они представляют функцию одного и того же типа. Вот наш собственный пример в Котлине, показывающий использование лямбда-выражений:
В этом примере определяются два лямбда-выражения: размножаться и делить. Оба лямбда-выражения принимают два целочисленных параметра и возвращают целочисленное значение. Функция выполнитьOperation также имеет два целочисленных параметра x и y и еще один параметр операция, который представляет функцию, которая принимает два целочисленных параметра и возвращает целочисленное значение.
В рамках выполнитьOperationфункция, переданная операция (размножаться или делить) с параметрами x и y вызывается, и результат выводится на консоль.
В основной функции будет выполнитьOperation звонили дважды, один раз с размножаться-Лямбда и один раз с делить-Лямбда.
Ввод лямбда-параметров
Когда лямбда присваивается параметру или переменной с явно указанным типом, типы параметров могут быть опущены в лямбда-выражении. Вот наш собственный пример в Котлине, показывающий вывод типа для лямбда-параметров:
В этом примере используется лямбда-выражение вычитать переменная с явно указанным типом (Инт, Инт) -> Инт назначенный. Поскольку Котлин распознает, что и первый, и второй параметры имеют тип Int типы параметров в лямбда-выражении можно опустить: { х, у -> х – у }. Котлин автоматически понимает параметры x и y типа Int есть.
То же самое относится и к вызову функции выполнитьОперацию(). При передаче лямбды в эту функцию Котлин автоматически определяет тип параметров. В примере функция выполнитьOperation со значениями 9 и 6 и лямбда-выражение, которое умножает два параметра.
конечная лямбда
В Котлине этот термин относится конечная лямбда относится к синтаксическому соглашению, согласно которому лямбда-выражение, служащее аргументом функции, записывается после списка параметров функции, а не в круглых скобках. Этот синтаксис используется, когда параметр функции, который принимает лямбда-выражение, является последним в списке параметров.
Использование конечная лямбда может сделать код более читабельным и чистым, особенно если лямбда-выражение содержит несколько строк или более сложную логику. Пример использования конечная лямбда в Котлине:
В этом примере функция имеет выполнитьOperation параметр операция, которое является лямбда-выражением. Поскольку этот параметр является последним в списке параметров, лямбда-выражение можно записать после списка параметров, а не в круглых скобках:
Вместо традиционного написания:
Лямбда-выражение как возвращаемое значение функции
Функция также может возвращать лямбда-выражение в качестве возвращаемого значения, соответствующего типу возвращаемого значения функции. Вот пример на Kotlin, показывающий, как функция может возвращать лямбда-выражение:
В этом примере у нас есть функция создатьАддер, который является целочисленным параметром x принимает и возвращает лямбда-выражение, которое, в свою очередь, принимает целочисленный параметр и возвращает целочисленное значение. Тип возвращаемого значения функции: (Инт) -> Инт.
Внутри функции создатьАддер вернет лямбда-выражение, содержащее значение x с другим целочисленным значением y добавлен. Поскольку лямбда-выражение соответствует ожидаемому типу возвращаемого значения функции, его можно использовать в качестве возвращаемого значения.
В дер- mainфункция, которую мы вызываем создатьАддер со значением 5 и получить возвращаемую лямбду переменной сумматор к. Затем мы позвоним сумматор со значением 3 включить и дать результат 8 на консоли.
Неиспользуемые параметры
В некоторых случаях лямбда-выражение может содержать параметры, которые не используются в теле лямбда-выражения. В таких ситуациях Котлин может заменить неиспользуемые параметры подчеркиванием. _ заменить, чтобы сделать код чище и понятнее. В этом примере показано, как неиспользуемые параметры в лямбда-выражениях в Kotlin можно заменить символами подчеркивания, чтобы сделать код чище и проще для понимания.
В этом примере у нас есть функция выберитеДействие, который принимает целочисленный номер параметра и возвращает лямбда-выражение, которое принимает два целочисленных параметра и возвращает целочисленное значение. Тип возвращаемого значения функции: (Инт, Инт) -> Инт.
Внутри функции выберитеДействие Давайте воспользуемся оператором if для возврата различных лямбда-выражений в зависимости от значения числа. Если номер ни один 1 больше 2 то есть он возвращает лямбда-выражение, которое просто содержит значение 0 возвращается. Поскольку в этом лямбда-выражении параметры не используются, их можно заменить подчеркиванием:
В основной функции мы вызываем выберитеДействие со значением 4 и получить возвращаемую лямбду переменной действие к. Затем мы позвоним действие со значениями 5 и 3 включить и дать результат 0 на консоли.
Каковы преимущества лямбда-выражений?
Лямбда-выражения обладают следующими преимуществами:
-
Более короткий и понятный синтаксис: Лямбды обеспечивают компактный и выразительный способ написания функций, особенно коротких и простых функций. Они позволяют определять функции как выражения, что делает код короче и удобнее для чтения.
-
Анонимные функции: Лямбда-выражения являются анонимными функциями, то есть у них нет имени. Это полезно, когда функция необходима только в определенном месте кода и не используется повторно. Вместо создания отдельной именованной функции можно определить лямбда-выражение и использовать его непосредственно там, где это необходимо.
-
Функциональное программирование: Лямбда-выражения поддерживают концепции функционального программирования, такие как функции высшего порядка и работа с коллекциями. Они позволяют передавать функции в качестве параметров другим функциям или использовать функции в качестве возвращаемых значений. В языках функционального программирования или при использовании парадигм функционального программирования лямбда-выражения являются фундаментальным инструментом.
-
Более простое манипулирование структурами данных: Лямбда-выражения часто используются в сочетании с коллекциями и структурами данных для упрощения таких операций, как фильтрация, преобразование или агрегирование данных. Лямбды позволяют выражать такие операции простым и интуитивно понятным способом. Вот простой пример кода для списка коллекций: