Рубрики
Без рубрики

C# для разработчика Java: Лямбды

Лямбда – это анонимная функция, которая может быть присвоена переменной, переданной в качестве аргумента метамфетамина… С тегами csharp, java, для начинающих.

C# для разработчика Java (серия из 4 частей)

Лямбда – это анонимная функция, которая может быть назначена переменной, передана в качестве аргумента метода и вызвана в любое время. Мы можем найти лямбды в Java и C#, и полученный код очень похож. Лямбда-код Java можно рассматривать как реализацию интерфейса только с одним методом (называемым функциональным интерфейсом ), тогда как лямбда-код C# может быть назначен делегату , что является концепцией, которой не существует в Java. Цель этой статьи – объяснить, как лямбды работают в Java и C#, и подчеркнуть их различия и сходства.

Функциональные интерфейсы Java

В Java лямбда-выражение можно просто рассматривать как анонимную функцию, реализующую интерфейс только с одним методом. Этот тип интерфейса называется функциональным интерфейсом и может быть снабжен аннотацией @FunctionalInterface , которая указывает компилятору применять правило только одного метода:

@FunctionalInterface
interface Printer {
  void print(String message);
}
// The function interface is implemented with a lambda
Printer standardPrinter = message -> System.out.println(message);

// The print method of standardPrinter can be invoked
standardPrinter.print("Hello World!");

Из предыдущего фрагмента вы должны отметить, что способ реализации интерфейса не имеет абсолютно никакого значения. Это может быть лямбда, конкретный класс или даже анонимный класс. В любом случае, вы можете просто вызвать метод print интерфейса.

В JDK есть некоторые предопределенные общие функциональные интерфейсы , которые можно использовать непосредственно с полки. Основные из них описаны ниже:

Функция Принимает аргумент заданного типа T и возвращает объект типа R R применить (T t)
Потребитель Принимает аргумент заданного типа T и делает что-то полезное (обычно с побочными эффектами) признание недействительным (T)
Сказуемое Принимает аргумент заданного типа T и возвращает логическое значение (аналогично функции) логический тест(T)
Поставщик Возвращает объект типа T T получить()

Делегаты C#

INC#, лямбда-выражение может быть назначено делегату, который является типом, инкапсулирующим метод:

delegate void Print(string message);
// A lambda is assigned to the delegate
Print print = message => System.Console.WriteLine(message);

// print can be directly invoked as a method
print("Hello World!");

Как и в Java, некоторые делегаты уже определены в.Сетевая структура, основные из которых описаны ниже:

Принимает аргумент заданного типа T и возвращает объект типа TResult Функция TResult (T arg)
Принимает аргумент заданного типа T и делает что-то полезное (обычно с побочными эффектами) действие аннулирования (T obj)
Принимает аргумент заданного типа T и возвращает логическое значение (аналогично функции) предикат bool(T obj)

Вывод

С точки зрения Java, использование лямбд в API (например, Linq) довольно просто. Однако, если копнуть немного глубже, нужно понять некоторые тонкие различия. Я нахожу подход Java более простым, поскольку он не вводит другую концепцию, но подход C# более чистый, потому что делегат может быть вызван напрямую, как метод.

C# для разработчика Java (серия из 4 частей)

Оригинал: “https://dev.to/rnowif/c-for-the-java-developer-lambdas-1b6o”