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





Я считаю лямбды в C# очень удобным сокращением для делегирования. Намного удобнее иметь код прямо там, где он используется, вместо того, чтобы искать определение делегата где-либо еще.
@johnstok - немного поздно указывать на это, но в этой статье говорится, что они отличаются только с точки зрения разработчика компилятора C# (которым является автор этого блога).
Лямбда-выражения позволяют писать менее подробный, более выразительный код. Например, составить список ...
Кстати, сейчас ведется работа по изучению возможности добавления замыканий в Java - пока что вместо этого необходимо использовать анонимные классы (некрасиво).
Существуют распространенные варианты использования, которые требуют передачи (или сохранения) блока кода для последующего выполнения. Самыми распространенными будут прослушиватели событий. Вы не поверите, но в следующем фрагменте кода в 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, которая была разработана Smalltalkers как нечто вроде чистого объектно-ориентированного языка). C# подходит для всех, и у него неплохо получается. C# основан на объединении лучших из различных стилей программирования в один высококачественный, хорошо поддерживаемый язык. Сюда входят процедурные, объектно-ориентированные, функциональные, динамические, логические и т. д. Стили программирования. Очевидно, что пока в нем не так много динамических или логических стилей программирования, но они скоро появятся (динамическое программирование идет с C# 4.0).
В случае C# лямбды используются внутри для реализации LINQ. См. Статью Эволюция LINQ и ее влияние на дизайн C#
обновил ссылку web.archive.org/web/20080828034246/http://msdn.microsoft.com /…
Lambda допускают более читаемый код, поскольку они позволяют определять операции ближе к точке использования, а не как текущий метод C++ использования объектов функций, определение которых иногда далеко от точки использования. (Это не включает некоторые библиотеки ускорения). Я думаю, что ключевым моментом лямбда-выражений является то, что они позволяют сделать код более лаконичным и понятным.
Они предлагают лучшую безопасность, используя многопоточность в Java, подразумевая во многих случаях «окончательный» вариант. Таким образом, вы не подвержены ошибкам из-за многозадачности.
Анонимные функции и лямбды различны в C# - blogs.msdn.com/ericlippert/archive/2007/01/10/…