Вопрос

По какой причине С# или Java имеют лямбды?Ни один из языков не основан на них, похоже, это еще один метод кодирования, делающий то же самое, что уже сделал C#.
Я не вступаю в конфронтацию, если есть причина, я хотел бы знать причину.Для полного раскрытия информации: я Java-программист с опытом работы на C++ и без опыта работы с Lisp, возможно, я просто упускаю суть.

Это было полезно?

Решение

Существуют распространенные случаи использования, которые требуют передачи (или сохранения) блока кода для последующего выполнения.Наиболее распространенными являются прослушиватели событий.Хотите верьте, хотите нет, но следующий фрагмент кода использует лямбда-конструкцию в Java:

JButton button = new JButton("Push me!");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Pressed!");
    }
});

Анонимный внутренний класс действует как лямбда, хотя и чрезвычайно многословный.Применив немного магии неявного преобразования, мы можем написать на Scala следующий эквивалент:

val button = new JButton("Push me!")
button.addActionListener { e =>
  println("Pressed!")
}

C# делает подобные вещи довольно простыми с помощью делегатов и (что еще лучше) лямбда-выражений.

Другие советы

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

Синтаксический сахар.

Он обеспечивает удобный и более читаемый способ представления идеи, в данном случае это крошечный одноразовый метод.Под капотом компилятор расширяет это до вызова делегата и метода, но работу выполняет именно он, а не вы.

Лямбды позволяют писать менее подробный и более выразительный код.Например, список понятий...

Кстати, ведется работа по изучению возможности добавления замыканий в Java - а пока вместо этого необходимо использовать анонимные классы (некрасиво).

C# не стремится к чистоте какой-либо конкретной школы языкового проектирования (в отличие от Java, который был разработан Smalltalkers как нечто вроде чистого объектно-ориентированного языка).C# ориентирован на все для всех, и он довольно хорош в этом.C# основан на объединении лучшего из различных стилей программирования в один высококачественный, хорошо поддерживаемый язык.Сюда входят процедурные, объектно-ориентированные, функциональные, динамические, логические и т. д.стили программирования.Очевидно, что пока в нем не так уж много динамических или логических стилей программирования, но это скоро произойдет (динамическое программирование появилось в C# 4.0).

В случае C# лямбды используются внутри системы для реализации LINQ.Посмотреть статью Эволюция LINQ и ее влияние на проектирование C#

Lambda делает код более читаемым, поскольку позволяет определять операции ближе к точке использования, а не как текущий метод C++, использующий функциональные объекты, определение которых иногда находится далеко от точки использования.(Это не считая некоторых библиотек повышения).Я думаю, что ключевым моментом лямбда-выражений является то, что они позволяют сделать код более кратким и простым для понимания.

Они обеспечивают лучшую безопасность, используя многопоточность в Java, подразумевая во многих случаях «последний» вариант.Таким образом, вы не подвержены ошибкам при многозадачности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top